Ich habe die folgenden Prozesse.
ParentProcess - ChildProcess - ChildProcess - ChildProcess
Wie kann ich nur den übergeordneten Prozess beenden? Ich möchte, dass die Kinderprozesse nicht getötet werden. Wenn ich versuche, den übergeordneten Prozess zu beenden, erhalten die Kinder SIGHUP und werden getötet.
Antworten:
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 ):
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 mitnohup
(voninfo coreutils "nohup invocation"
):In diesem Beispiel:
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äutertbash
.quelle