[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Prozesse nicht killbar?



On Tue, Jul 09, 2002 at 12:31:31AM +0200, Rüdiger Noack wrote:
>  --- Daniel Bayer <daniel.bayer@stud.uni-rostock.de> schrieb: > On Mon,
> > Zumindest ist das dann ein sehr merkwürdiges Programm. Zumal sich das
> > beseitigen von Zombies mit höchstens 10 Zeilen Code erledigen läßt.
> 
> Die 10 Zeilen würde ich gern mal sehen wollen...;)

Zombies entstehen ja im Prinzip nur dann, wenn der Elternprozeß sich
nicht um die Rückgabe des Kindsprozesses kümmert und deshalb nicht
ordentlich wait() aufruft. Wenn es den Rückgabewert braucht, wird
auch wait() aufgerufen. Das sollte also kein Problem sein.

Und den ersten Fall kann man einfach mit einem Signalhandler für
SIGCHLD erschlagen:

| static void sig_chld(int signo)
| {
| 	pid_t pid;
| 	do {
| 		pid = waitpid(-1, NULL, WNOHANG);
| 	} while (pid > 0 || pid < 0 && errno == EINTR);
| }

(oder so ähnlich) Sind inklusive Aufruf von signal() sogar nur 8
Zeilen.

> Zombies entstehen ja genau denn, wenn sie noch auf eine "Ende-Meldung"
> von ihrem Vaterprozess warten, dieser sich aber undefiniert
> verabschiedet hat. Wenn also der Vaterprozess verschwindet, bekommen
> sie als neue ppid die 1 (init).

Und init ruft dann sofort wait() auf und der Zombie ist weg.

> Wenn sie jetzt in einer Schleife sind, aus der sie nur durch ein
> ganz bestimmtes Kommando herauskommen, das aber nie kommt (weil nur
> der ursprüngliche Vaterprozess es kennt), hat man verloren!

Wenn der Prozeß noch Anweisungen ausführt, ist er noch am Leben.
Zombies sind aber bekanntermaßen zumindest ein bißchen tot. Was Du da
beschrieben hast, ist kein Zombie sondern ein Deadlock.

um das nomal klarzustellen: Ein Zombie besteht nur noch aus einem
Eintrag in der Prozeßtabelle. Dazu kommt dann noch der Returnwert und
die Informationen über die verbrauchten Resourcen (struct rusage).
Alles andere (Programmcode, verwendeter Arbeitspeicher, ...) ist schon
lange wieder freigegeben.

> Zombies entstehen (wenn sie länger bestehen bleiben) aus schlecht
> programmierter Software!

In der Doku von irgendeinen Programm habe ich mal gelesen, daß es
normal ist, wenn das Programm einen Zombie hat. Gibt schon merkwürdige
Sachen ...


Daniel

Attachment: pgpYYvDqy_F_L.pgp
Description: PGP signature


Reply to: