Im Allgemeinen wird ein Prozess, der verwaist ist (dh sein Elternteil stirbt), von init übernommen.
Die von Ihnen beschriebene spezielle Situation gilt wahrscheinlich für einen interaktiven Prozess, wenn dessen steuerndes Terminal geschlossen wird (aus Wikipedia ):
Das SIGHUP-Signal wird an einen Prozess gesendet, wenn dessen Steuerterminal geschlossen ist. Es wurde ursprünglich entwickelt, um den Prozess eines seriellen Leitungsausfalls zu melden. In modernen Systemen bedeutet dieses Signal normalerweise, dass die Steuerung des Pseudo- oder virtuellen Terminals geschlossen wurde.
Um dies zu verhindern, sollten untergeordnete Prozesse SIGHUP blockieren. In den meisten Fällen benötigen Sie daher die Zusammenarbeit des übergeordneten Prozesses.
Wenn der übergeordnete Prozess eine Shell ist ( bash
, csh
und dergleichen) , und Sie mögen Befehle , die Sie nicht zu beenden , laufen , wenn bash beendet, Sie jeden Befehl Präfix können mit nohup
(von info coreutils "nohup invocation"
):
'nohup' führt den angegebenen BEFEHL mit ignorierten Hangup-Signalen aus, sodass der Befehl nach dem Abmelden im Hintergrund weiter ausgeführt werden kann.
In diesem Beispiel:
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
wird nicht getötet, wenn die Shell das steuernde Terminal beendet und schließt /dev/ttys000
.
Wenn ein Shell-Skript SIGHUP blockieren soll, verwenden Sie das eingebaute Skript trap
, wie hier für erläutert bash
.