In einem Bash-Shell-Skript wird das kaufmännische Und „&“ verwendet, um Prozesse zu forken:
find -name hello &
Es bewirkt, dass der Find-Befehl gegabelt und im Hintergrund ausgeführt wird (Sie können ihn jederzeit über seine PID beenden).
Warum einen Linux-Shell-Befehl mit '&' ausführen?
So erhalten Sie Ihre Eingabeaufforderung sofort zurück und führen den Prozess im Hintergrund aus.
Welche Funktion haben sie?
Nein ermöglicht, dass der Hintergrundprozess auch dann weiterläuft, wenn sich der Benutzer abmeldet (oder die initiierende Shell verlässt).
>& leitet sowohl die Standardausgabe als auch die Standardfehler in die Protokolldatei um.
& läuft das Ganze im Hintergrund ab und gibt Ihnen sofort Ihren Prompt zurück.
Erklärung:
Jeder Linux-Prozess öffnet drei I/O-Kanäle, einen Input „stdin“, einen Standard-Output „stdout“ und einen Standard-Error-Output „stderr“. Sie können für Binärdateien verwendet werden, sind aber traditionell Text. Wenn die meisten Programme sehen, dass stdin geschlossen wird, werden sie beendet (dies kann vom Programmierer geändert werden).
Wenn die übergeordnete Shell beendet wird, wird stdin für die untergeordneten Elemente geschlossen, und (häufig, normalerweise) werden die untergeordneten Elemente ebenfalls beendet. Zusätzlich empfangen die Kinder ein Softwaresignal, SIGHUP, das anzeigt, dass der Benutzer "aufgelegt" hat (früher das Modem), und die Standardeinstellung hier ist ebenfalls zu beenden. (Beachten Sie, dass ein Programmierer all dies ändern kann, wenn er das Programm schreibt).
Was nohup also tut, ist, dem untergeordneten Prozess eine separate E/A-Umgebung zu geben, die Ein- und Ausgänge mit etwas zu verbinden, das nicht mit der übergeordneten Shell verbunden ist, und das untergeordnete Element vor dem SIGHUP-Signal abzuschirmen. Sobald der Benutzer die Verbindung trennt, sehen Sie den nohup-Hintergrundprozess, der init gehört (Prozess 1), nicht die Shell des Benutzers.
Jedoch nohup
kann den Job nicht vollständig erledigen, wenn der Prozess im Vordergrund ausgeführt wird, also &
wird verwendet, um das Programm im Hintergrund auszuführen, wo es problemlos mit oder ohne angemeldeten Benutzer ausgeführt werden kann.
Zusätzlich zu den Antworten von Martin, Ash und Kevin sehen Sie manchmal ein kaufmännisches Und, das mathematisch für ein bitweises UND verwendet wird:
$ echo $(( 11 & 7 ))
3
Falls Sie mit Bitoperatoren nicht vertraut sind:
11: 1011
7: 0111
-------- AND
3: 0011
An jeder Position gibt es ein Eins-Bit in der ersten Zahl UND in der zweiten Zahl, setzen Sie dieses Bit in der Antwort auf Eins.
Um auf Ashs Antwort näher einzugehen, kann das kaufmännische Und bei der Umleitung die Shell anweisen, einen Dateideskriptor zu kopieren. In diesem Befehl echo "hello" > outputfile 2>&1
Das kaufmännische Und bewirkt, dass jede Ausgabe, die an den Standardfehler (stderr, Dateideskriptor 2) gehen könnte, an die gleiche Stelle geht wie die Standardausgabe (stdout, Dateideskriptor 1, die Vorgabe für die linke Seite von >
). ). Die >& outputfile
Operator ist eine Abkürzung für > outputfile 2>&1
.
Außerdem gibt es neu in Bash 4 zwei neue Terminatoren für Klauseln in case
Befehl ;&
und ;;&
die beeinflussen, ob ein Fall "durchfällt" und wenn ja, ob die nächste Prüfung durchgeführt wird.