GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit příkaz Linux na pozadí a odpojit proces v terminálu

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:

  1. váš řídicí terminál je zaplněn tolika výstupními daty a chybovými/diagnostickými zprávami.
  2. 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.


Linux
  1. Jak spravovat úlohy na pozadí Linuxu pomocí příkazů fg a bg

  2. Jak najít a zabít zombie proces v Linuxu

  3. Jak zabít proces v Linuxu pomocí příkazu?

  1. Co je příkaz Chown v Linuxu a jak jej používat

  2. Jak používat vi k úpravě příkazu v terminálu na Linuxu?

  3. Jak spustit GUI linuxové programy z příkazového řádku, ale odděleně od příkazového řádku?

  1. Jak vyvažuji funkce a výkon v mém linuxovém terminálu

  2. Jak spustit příkaz / skript Linux Shell na pozadí

  3. Linux Tail Command:Co to je a jak jej používat