Zombies im Prozessbaum
Lutz Donnerhacke
lutz at iks-jena.de
Mon Nov 24 10:12:46 CET 2003
* Johannes Vieweg wrote:
> Am Sonntag, 23. November 2003 20:33 schrieb Lutz Donnerhacke:
>> Nein. Stirbt der Papa, geht das Kind unmittelbar an PID 1 (aka init).
>
> So?
Ja.
> Wieso ist dann netstat laut pstree dem mozilla zugewiesen gewesen?
Weil mozilla pstree aufgerufen hat oder das direkte mozilla-Kind exec zu
netstat ausführte.
> Designfehler? Zufall?
Fakt.
> Und - warum hat sich dann der Zombie sooo lange im Prozessbaum
> rungetrieben?
Weil der Papa noch läuft, und kein wait aufruft. Evtl. macht er das nicht,
weil er SIGCHLD nicht verstanden hat (ein Signal können mehrere Kinder sein,
man muß wait in einer Schleife aufrufen).
Wenn man aber in den Code schaut: kernel/exit.c, so könnte man Deinem
Argument folgen, weil dort Threads dem Vaterprozess zugeordnet werden. Dies
gilt aber nicht für Prozesse, sondern wirklich nur für Threads.
_EXIT(2) Linux Programmer's Manual _EXIT(2)
NAME
_exit - terminate the current process
SYNOPSIS
#include <unistd.h>
void _exit(int status);
DESCRIPTION
_exit terminates the calling process immediately. Any open file
descriptors belonging to the process are closed; any children of the
process are inherited by process 1, init, and the process's parent is
sent a SIGCHLD signal.
status is returned to the parent process as the process's exit status,
and can be collected using one of the wait family of calls.
RETURN VALUE
_exit never returns.
CONFORMING TO
SVr4, SVID, POSIX, X/OPEN, BSD 4.3
NOTES
_exit does not call any functions registered with the ANSI C atexit
function and does not flush standard I/O buffers. To do these things,
use exit(3).
SEE ALSO
fork(2), execve(2), waitpid(2), wait4(2), kill(2), wait(2), exit(3)
Linux 21 July 1993 _EXIT(2)