All pastes #579741 Raw Edit

Absurd-Mind

public text v1 · immutable
·published 2007-06-20 20:16 UTC
rendered paste body
<Airhardt> aaalso, dann packe ich mal aus:
<Airhardt> das problem, wenn man SIGCHLD blockiert und mit waitpid() wartet, bis der vordergrundprozess beendet ist, ist, dass sich alle gestorbenen hintergrundprozesse anstauen
<Airhardt> laut aufgabenstellung soll das einsammeln der zombies aber _unmittelbar_ erfolgen
<Airhardt> also muss man es ein bisschen anders machen
<Absurd-Mind> ah!
* nordicgrass (nordic@vpn-054e.vpn.informatik.uni-erlangen.de) hat #faui2k6 betreten
<Airhardt> man muss sich auf jeden fall global merken, ob momentan ein vordergrundprozess läuft und welche pid & befehlszeile der hat
<Airhardt> dann muss man den SIGCHLD-handler so einrichten, dass er bei jedem SIGCHLD nachguckt, ob der gestorbene prozess der vordergrundprozess war
<Airhardt> falls ja: seinen exitstatus ausgeben und global markieren, dass es wieder keinen vordergrundprozess mehr gibt
<Airhardt> so viel zum signal-handler, zurück zum vaterprozess nach dem fork()
<Airhardt> man muss auf jeden fall das SIGCHLD vor dem fork()en mit sigprocmask() blockieren
<Airhardt> dann trägt man die daten des vordergrundprozesses in diese globale struktur (oder was man sich halt eingerichtet hat) ein
<Airhardt> sodann erstellt man mit sigfillset() und sigdelset() eine maske, die alle signale bis auf SIGCHLD enthält...
<Airhardt> ... und lässt eine schleife laufen, in der sigsuspend() auf eben diese maske so oft aufgerufen wird, bis in der globalen variable wieder drinsteht, dass es keinen vordergrundprozess mehr gibt
<Airhardt> und schlussendlich muss man SIGCHLD wieder deblockieren
<Airhardt> [EOF]
<Airhardt> (also kein wait() oder waitpid() im hauptprozess, sondern nur im signalhandler)
<Airhardt> alle mann erschlagen?
<Absurd-Mind> hmpf, klingt nach arbeit
<Airhardt> bisschen umbauen halt