2009-09-29 12 views

Antwort

16

Sie müssen die Unterprozesse dämonisch machen, damit sie getötet werden, wenn der Vater getötet wird (oder stirbt), andernfalls werden sie von init (1) übernommen.

+1

Hier ist ein Link zu wie um einen Zombie-Prozess zu erstellen, wenn Sie daran interessiert sind, wie sie erstellt werden, und um zu experimentieren, wie sie für Ihr System gehandhabt werden: http://www.unix.com/unix-dummies-questionsanswers/100737-how- do-you-create-zombie-process.html – Klathzazt

+4

Dämonische, Vater, Eltern, Kind und Zombie-Prozesse. Computer erzählen so eine lustige und skurrile Geschichte. – jwarner112

23

Nein, untergeordnete Prozesse werden nicht unbedingt beendet, wenn der übergeordnete Computer getötet wird.

Wenn das Kind jedoch eine Pipe geöffnet hat, in die es schreibt und von der es liest, erhält es einen SIGPIPE, wenn es als nächstes versucht, in die Pipe zu schreiben, für die die Standardaktion es ist. Das passiert oft in der Praxis.

8

Unter UNIX gibt es keine erzwungene Beziehung zwischen den Lebensdauern des übergeordneten und untergeordneten Prozesses. Streng genommen wird der Prozess nur beendet, wenn er exit() aufruft oder ein nicht behandeltes Signal empfängt, für das die Standardaktion beendet werden soll.

Jedoch kann eine gesamte "Vordergrundprozessgruppe" in einem "steuernden Terminal" Signale wie SIGINT und SIGQUIT empfangen, wenn der Benutzer ctrl-C, ctrl- \, etc. unter terminal. Spezifisches Verhalten wird teilweise von der Login-Shell implementiert (mit Hilfe des tty-Treibers). Details können ziemlich kompliziert sein: schauen Sie here und here

-9

Sie müssen nur wissen, welchen Prozess oder Dienst Sie töten möchten. In meinem Fall ist httpd.

killall -9 httpd 

Es wird alle untergeordneten Prozesse von httpd.

+0

Völlig den Punkt der Frage verpasst. –

+0

Dieser Beitrag beantwortet die gestellte Frage nicht, und da andere Antworten dies tun, möchten Sie diesen Beitrag möglicherweise löschen. –

-1

Wenn Sie die Terminal-PID schließen, die die Prozess-ID des Prozesses ist, wird das Terminal geschlossen. Und wenn das Terminal geschlossen ist, werden auch alle seine Prozesse beendet. Aber wenn du eine Subshell in der Shell erstellst, dann wenn du irgendeinen Prozess erstellst und ppid dieses Prozesses tötest, dann tötet nur diese Subshell und ihr Kind wird zu Waisen. Ihr Elternteil wird init und pid ist 1.

[Praktikant @ SIPL ~] $ ps -ef | grep schlaf trainee 3893 3870 0 10:55 pts/1 00:00:00 schlafen 4000 auszubildende 3895 3788 0 10:55 pts/0 00:00:00 grep --color = auto schlafen [azubi @ SIPL ~] $ kill - 9 3870 [Praktikant @ SIPL ~] $ ps -ef | grep schlaf azubi 3893 1 0 10:55 pts/1 00:00:00 schlafen 4000 azubi 3906 3788 0 10:55 pts/0 00:00:00 grep --color = auto schlafen