Wie kann ich nur einen übergeordneten Prozess beenden?

10

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.

kcm1700
quelle
5
Ist die Definition eines untergeordneten Prozesses, dass er an seinen übergeordneten Prozess gebunden ist?
Brad Patton
ähm, wahrscheinlich ja. Es ist an seine Eltern gebunden.
kcm1700

Antworten:

8

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, cshund 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 {} \;

findwird 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.

jaume
quelle
1
Ich habe den Prozess bereits ohne Nohup geöffnet, irgendwelche Vorschläge?
kcm1700
Soweit ich weiß, kann man nicht viel machen. Sobald Prozesse ausgeführt werden, können Sie die Reaktion auf Signale nicht mehr ändern.
Jaume
1
Wie stelle ich einen bereits laufenden Prozess unter nohup? stackoverflow.com/questions/625409/…
PeterVermont