Wann sollte ich "nohup" verwenden und wann sollte ich "&" verwenden?

16

Ich weiß nie, wann der beste Zeitpunkt ist, um nohup und das & am Ende des Befehls zu verwenden.

Alex
quelle

Antworten:

20

Nohup veranlasst ein Programm, das HUP-Signal zu ignorieren, sodass es ausgeführt werden kann, nachdem das aktuelle Terminal geschlossen / der Benutzer abgemeldet wurde. Nohup sendet kein Programm in den Hintergrund.
& am Ende des Befehls bezieht sich auf die Shell-Job-Steuerung, sodass der Benutzer in der aktuellen Shell-Sitzung weiterarbeiten kann.
Normalerweise werden nohup und & kombiniert, um ein Programm zu starten, das nach dem Abmelden des Benutzers ausgeführt wird und die Fortsetzung der Arbeit in der aktuellen Shell-Sitzung ermöglicht.

Kristaps
quelle
13

Normalerweise verwende ich, &wenn ich im Hintergrund einen Befehl ausführen möchte, dessen Ausführung nicht lange dauert, oder einen, bei dem es mir egal ist, ob das Programm beendet wird, wenn ich unerwartet von einer Sitzung abgemeldet werde.

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

Wenn ich über ein VPN oder eine zwielichtige Remoteverbindung arbeite, verwende ich normalerweise nohupalles, was eine Weile dauern wird. Wenn Sie beispielsweise große Datenmengen auf einem Remote-Host importieren, möchten Sie möglicherweise nohupsicherstellen, dass Sie nach dem Trennen der Verbindung nicht erneut von vorne beginnen, wenn Sie die Verbindung wiederherstellen.

nohup ./do_data_load.py mydatafile.txt &

Es wird auch verwendet, wenn ein Entwickler einen Dienst nicht ordnungsgemäß dämonisiert, sodass Sie nohupsicherstellen müssen , dass er beim Abmelden nicht beendet wird.

nohup sillyd &

Wenn Sie nohupbeim Ausführen der letzten beiden Beispiele vergessen haben, etwas zu verwenden , können Sie die integrierte Bash- oder Zsh-Funktion disownfür den gleichen Effekt verwenden.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

Es ist ziemlich selten, nohupohne zu verwenden &, da Sie nicht wirklich eine neue Verbindung zu der nicht aktualisierten Sitzung herstellen können, wenn Sie abgemeldet sind. Dies macht seine Nützlichkeit für interaktive Befehle so gut wie unmöglich. Wenn Sie über einen interaktiven Befehl verfügen, den Sie über Sitzungen hinweg beibehalten oder komplizierte Verbindungsabbrüche vermeiden möchten, können Sie diesen verwenden screen. Die Feuerkraft einer vollständig bewaffneten und operativen screenSitzung liegt außerhalb des Rahmens dieses Beitrags. Sie sollten sich dies daher genauer ansehen .

Cakemox
quelle
Ich finde tmux einfacher zu konfigurieren und zu benutzen als screen. Auch BSD lizenziert.
Kristaps
1
Sie können auch verwenden, um byobudem Bildschirm einige nette Funktionen hinzuzufügen. Es ist in den meisten passenden Repos und in den EPEL-Repos für Red Hat verfügbar.
James
0

nohup: Aktuellen Benutzer abmelden, der Vorgang wird nicht gestoppt

&: Mit diesem Symbol wird im aktuellen Terminal keine Ausgabe ausgegeben. Der Prozess wird im Hintergrund ausgeführt

anonym
quelle
4
Dort werden wir immer noch ausgegeben, da & Standardausgaben und Fehlerströme nicht entfernt. Sie müssen die Stream-Umleitung wie folgt verwenden (in Bash): Befehl> / dev / null 2> 1
Kristaps