aufgabe 6: weg mit den zombies!

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

aufgabe 6: weg mit den zombies!
gibt es irgendeine möglichkeit, zombie-kindprozesse ohne ein wait(…) zu verhindern?
wenn ich im elternprozess wait() aufrufe könnte ich ja keine weiteren verbindungen mehr annehmen, was ja nicht sinn der sache ist…


laut Aufgabenstellung braucht ihr euch um Kindprozesse nicht zu kümmern…

Falls es dich dennoch interessiert bräuchtest Du eine Funktion (Signalhandler)

void ghostbuster(int s) {
        while(waitpid(-1,NULL,WNOHANG)>0);
}

und in Deiner main() irgendwo bevor Du forkst

struct sigaction act;
act.sa_handler=ghostbuster;
sigemptyset(&act.sa_mask);
act.sa_flags=SA_RESTART;
sigaction(SIGCHLD,&act,NULL);

mehr dazu gibts übrigens nächste Woche und wenn Du es bis dahin nicht aushälst helfen die manpages zu der oben verwendeten Funktion


Bei wird der Zombie abgeschossen sobald die nächste Verbindung aufgebaut wird. Naja bin jetzt eh frustriert → send.


@Mikey
danke :cheesy: sowas ähnliches (waitpid(… WNOHANG)) hatte ich schon probiert, hatte aber nicht funktioniert. :wink:
war auch mehr aus interesse, hatte ein bisschen gegooglelt und irgendwie stand da immer sowas ähnliches wie: “(…) du brauchst wait (…)” :rolleyes: erschein mir etwas unglaubwürdig :gun:


ZOMBIEs kann man nciht abschiessen, die sind doch schon tot. Das liest man in jedem Gruselroman…

Aber ohne Scheiss: man kann sie nur erloesen (und dafuer gibt’s wait).

In UNIX System V haben sie mal was ganz perverses erfunden:
Wenn ein Kind stirbt, dann schickt’s dem Vater ein Signal. Normalerweise ignoriert der das
einfach (bei anderen Signalen stirbt ein Prozess ja default-maessigerweise - bei diesem
Signal waere da aber natuerlich nicht sinnvoll, denn dann wuerde der Tod eines Kindes ja
gleich die ganze Sippe dahinraffen).
Wenn der Vater dem Betriebssystem aber explizit sagt, dass er dieses Signal ignorieren will
(im Unterschide su default-maessig ignorieren), dann denkt sich das Betriebssystem „wenn
dem das eh’ egal ist, dann erzeug ich gar nicht erst 'nen ZOMBIE“ (der ZOMBIE wird ja nur
aufgehoben, um die Daten, die der Vater evtl. mit wait abfragen will irgendwo zwischenspeichern zu koennen).

Das ist aber eine voellig verkorkste Vorgehensweise, hier implizit aus einer Signalbehandlung
so was zu schliessen (nur falls einer das irgendwo im Netz beschrieben findet).


[quote=juk]
ZOMBIEs kann man nciht abschiessen, die sind doch schon tot. Das liest man in jedem Gruselroman…[/quote]
Spiel mal wieder Serious Sam!! :wink:
Oder als alter RPG-ler: Zombies sind untote und eine gute Waffe ist echt nicht schlecht, weil der Magier von der letzten Schlacht noch erschöpft ist und der Prister grad von allen guten Geistern verlassen ist. :wink: