V tomto průvodci vysvětlíme jednoduchý, ale důležitý koncept v řízení procesů v systému Linux, tedy jak zcela oddělit proces od jeho řídícího terminálu.
Když je proces spojen s terminálem, mohou nastat dva problémy:
- váš řídicí terminál je zaplněn tolika výstupními daty a chybovými/diagnostickými zprávami.
- v případě, že je terminál uzavřen, proces spolu s podřízenými procesy bude ukončen.
Chcete-li se vypořádat s těmito dvěma problémy, musíte zcela oddělit proces od řídicího terminálu. Než se skutečně pustíme do řešení problému, stručně si proberme, jak spouštět procesy na pozadí.
Jak spustit linuxový proces nebo příkaz na pozadí
Pokud je proces již spuštěn, jako je příklad příkazu tar níže, jednoduše stiskněte Ctrl+Z
pro zastavení zadejte příkaz bg
pokračovat v jeho provádění na pozadí jako úlohy.
Všechny své úlohy na pozadí můžete zobrazit zadáním jobs
. Nicméně jeho stdin , stdout , stderr jsou stále připojeny k terminálu.
$ tar -czf home.tar.gz . $ bg $ jobs
Můžete také spustit proces přímo na pozadí pomocí ampersandu, &
podepsat.
$ tar -czf home.tar.gz . & $ jobs
Podívejte se na příklad níže, ačkoli příkaz tar byl spuštěn jako úloha na pozadí, na terminál byla stále odeslána chybová zpráva, což znamená, že proces je stále připojen k řídicímu terminálu.
$ tar -czf home.tar.gz . & $ jobs
Ponechejte procesy Linuxu spuštěné i po ukončení terminálu
Použijeme disown příkaz, používá se po spuštění procesu a jeho umístění na pozadí, jeho úkolem je odstranit shellovou úlohu z aktivního seznamu úloh shellu, proto nepoužijete fg
, bg
příkazy pro tuto konkrétní úlohu.
Navíc, když zavřete ovládací terminál, úloha se nezasekne ani neodešle SIGHUP na jakékoli dětské práce.
Doporučené čtení: 5 způsobů, jak udržet vzdálené relace a procesy SSH v chodu
Podívejme se na níže uvedený příklad použití diswon vestavěná funkce bash.
$ sudo rsync Templates/* /var/www/html/files/ & $ jobs $ disown -h %1 $ jobs
Můžete také použít nohup
příkaz, který také umožňuje procesu pokračovat v běhu na pozadí, když uživatel opustí shell.
$ nohup tar -czf iso.tar.gz Templates/* & $ jobs
Odpojte linuxové procesy od řídicího terminálu
Chcete-li tedy zcela odpojit proces od řídicího terminálu, použijte formát příkazu níže, který je efektivnější pro grafické uživatelské rozhraní (GUI ) aplikace jako firefox:
$ firefox </dev/null &>/dev/null &
V systému Linux /dev/null je speciální soubor zařízení, který odepíše (zbaví se) všech do něj zapsaných dat, ve výše uvedeném příkazu se vstup čte a výstup se posílá do /dev/null .
Doporučené čtení: 10 příkladů příkazů obrazovky pro odpojení relací terminálu
Závěrečná poznámka, pokud je proces připojen k řídicímu terminálu, jako uživatel uvidíte na svém terminálu několik výstupních řádků procesních dat a také chybová hlášení. Znovu, když zavřete řídicí terminál, váš proces a podřízené procesy budou ukončeny.
Důležité je, že v případě jakýchkoli dotazů nebo poznámek k tématu nás kontaktujte pomocí níže uvedeného formuláře pro komentáře.