GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man einen untergeordneten Prozess sterben lassen, nachdem der übergeordnete Prozess beendet wurde?

Das Kind kann den Kernel bitten, 00 zu liefern (oder ein anderes Signal), wenn ein Elternteil stirbt, indem Option 19 angegeben wird in 27 Systemaufruf wie folgt:

31

Siehe 49 für Details.

Bearbeiten:Dies ist nur Linux


Ich habe dies in der Vergangenheit erreicht, indem ich den "Original"-Code im "Kind" und den "erzeugten" Code im "Eltern" ausgeführt habe (das heißt:Sie kehren den üblichen Sinn des Tests nach 57 ). Fangen Sie dann SIGCHLD im "erzeugten" Code ein ...

In Ihrem Fall vielleicht nicht möglich, aber nett, wenn es funktioniert.


Ich versuche, das gleiche Problem zu lösen, und da mein Programm unter OS X laufen muss, hat die reine Linux-Lösung für mich nicht funktioniert.

Ich bin zu dem gleichen Schluss gekommen wie die anderen Leute auf dieser Seite – es gibt keine POSIX-kompatible Möglichkeit, ein Kind zu benachrichtigen, wenn ein Elternteil stirbt. Also habe ich mir das Nächstbeste ausgedacht – die Kinderumfrage.

Wenn ein Elternprozess stirbt (aus irgendeinem Grund), wird der Elternprozess des Kindes zu Prozess 1. Wenn das Kind einfach periodisch abfragt, kann es überprüfen, ob sein Elternprozess 1 ist. Wenn dies der Fall ist, sollte das Kind beendet werden.

Das ist nicht großartig, aber es funktioniert, und es ist einfacher als die TCP-Socket/Lockfile-Polling-Lösungen, die an anderer Stelle auf dieser Seite vorgeschlagen werden.


Linux
  1. Wie beendet man einen Prozess, dessen Eltern Init ist?

  2. Funktionsweise des Linux-Prozesslebenszyklus – Eltern-, Kind- und Init-Prozess

  3. Wie erhalte ich einen Rückgabewert von CHILD PROCESS?

  4. Wie kann man einen untergeordneten Prozess nach einem bestimmten Timeout in Bash beenden?

  5. Warum ist der untergeordnete Prozess noch am Leben, nachdem der übergeordnete Prozess in Linux beendet wurde?

So zeigen Sie PPIDs unter Linux an

Wie lege ich das Arbeitsverzeichnis des übergeordneten Prozesses fest?

Wie verfolgt man einen untergeordneten Prozess mit strace?

Der untergeordnete Prozess empfängt das SIGINT des übergeordneten Prozesses

Wie listet man die Verzeichnisgröße aller untergeordneten Verzeichnisse auf?

Wie behandelt Copy-on-Write in fork() mehrere Forks?