GNU/Linux >> Znalost Linux >  >> Linux

Proč spouštět příkaz prostředí Linux s '&'?

Ve skriptu shellu Bash se ampersand „&“ používá k rozvětvení procesů:

find -name hello &

Způsobí to rozvětvení příkazu find a jeho spuštění na pozadí (vždy jej můžete zabít podle jeho PID).


Proč spouštět příkaz prostředí Linux s '&'?

Chcete-li okamžitě získat zpět výzvu a spustit proces na pozadí.

Jakou mají funkci?

nohup umožňuje procesu na pozadí pokračovat v běhu i poté, co se uživatel odhlásí (nebo opustí iniciační shell).

>& přesměruje standardní výstup i standardní chybu do souboru protokolu.

& spustí celou věc na pozadí a okamžitě vám vrátí výzvu.

Vysvětlení:

Každý linuxový proces otevírá tři I/O kanály, vstupní „stdin“, standardní výstup „stdout“ a standardní chybový výstup „stderr“. Mohou být použity pro binární, ale jsou tradičně textové. Když většina programů uvidí, že se stdin zavře, ukončí se (toto může změnit programátor).

Když nadřazený shell opustí, stdin se zavře pro děti a (často, obvykle) děti také opustí. Děti navíc obdrží softwarový signál SIGHUP, který signalizuje, že uživatel „zavěsil“ (dříve modem) a výchozí nastavení je zde také ukončení. (Poznámka, programátor může toto vše změnit při psaní programu).

Nohup tedy dává podřízenému procesu samostatné I/O prostředí, spojuje vstupy a výstupy s něčím, co není spojeno s nadřazeným shellem, a chrání dítě před signálem SIGHUP. Jakmile se uživatel odpojí, uvidíte proces nohup na pozadí vlastněný init (proces 1), nikoli shell uživatele.

Nicméně nohup nemůže provést úlohu úplně, pokud je proces spuštěn v popředí, takže & se používá ke spuštění programu na pozadí, kde může klidně zůstat spuštěný s přihlášeným uživatelem i bez něj.


Kromě Martinových, Ashových a Kevinových odpovědí někdy uvidíte ampersand použitý matematicky pro bitové AND:

$ echo $(( 11 & 7 ))
3

V případě, že nejste obeznámeni s bitovými operátory:

11: 1011
 7: 0111
-------- AND
 3: 0011

Na každé pozici je jeden bit v prvním čísle A ve druhém čísle, nastavte tento bit na jedničku v odpovědi.

Abychom upřesnili Ashovu odpověď, při použití v přesměrování může ampersand říct shellu, aby zkopíroval deskriptor souboru. V tomto příkazu echo "hello" > outputfile 2>&1 ampersand způsobí, že jakýkoli výstup, který může přejít na standardní chybu (stderr, deskriptor souboru 2), se přesune na stejné místo jako standardní výstup (stdout, deskriptor souboru 1, výchozí pro levou stranu > ). >& outputfile operátor je zkratka pro > outputfile 2>&1 .

Novinkou v Bash 4 jsou také dva nové terminátory pro klauzule v case příkaz ;& a ;;& které ovlivňují, zda případ „propadne“, a pokud ano, zda se provede další test.


Linux
  1. Proč se držím xtermu

  2. Linux Tee Command s příklady

  3. JQ Command v Linuxu s příklady

  1. wc Linux Command s příklady

  2. Linux řazení příkazů s příklady

  3. Echo Command v Linuxu (s příklady)

  1. man Command v Linuxu s příklady

  2. Příkaz AWK v Linuxu s příklady

  3. Jak spustit příkaz s časovým limitem (Timeout) v Linuxu