Ich habe eine Antwort von einem Benutzer gelesen, der behauptet, dass sie ausgeführt wird
foo 2>&1 >& output.log &
würde dazu führen foo
, dass die Ausführung auch dann fortgesetzt wird, wenn sie sich abmelden. Laut diesem Benutzer funktionierte dies sogar über SSH-Verbindungen.
Ich habe das nicht wirklich geglaubt, da ich den Eindruck hatte, dass im Falle einer Trennung von SSH oder der Beendigung des TTY die Shell und damit ihre Prozesse ein SIGHUP erhalten würden, wodurch sie beendet würden. Dies unter meiner Annahme, war der einzige Grund für die Verwendung nohup
in solchen Fällen oder tmux
, screen
et al.
Ich habe dann in glibcs Handbuch geschaut :
Dieses Signal wird auch verwendet, um die Beendigung des Steuerungsprozesses auf einem Terminal an Jobs zu melden, die dieser Sitzung zugeordnet sind. Diese Beendigung trennt effektiv alle Prozesse in der Sitzung vom steuernden Terminal.
Dies scheint meine Gedanken zu bestätigen. Aber wenn man weiter schaut, heißt es :
Wenn der Prozess ein Sitzungsleiter ist, der über ein steuerndes Terminal verfügt, wird ein SIGHUP-Signal an jeden Prozess im Vordergrundjob gesendet, und das steuernde Terminal wird von dieser Sitzung getrennt.
Bedeutet dies also, dass Jobs im Hintergrund kein SIGHUP erhalten?
Zu meiner weiteren Verwirrung führte ich eine interaktive Zsh-Sitzung durch, lief yes >& /dev/null &
und tippte exit
, als Zsh mich warnte, dass ich laufende Jobs hatte, und exit
sagte mir nach einem zweiten Tippen , dass es einen Job SIGHUPIERT hatte. Wenn Sie in Bash genau dasselbe tun, läuft der Job…
logout
undyes
läuft noch.