Forum: PC-Programmierung C schieße childs erst nach deren terminierung


von Christian H. (christian_h52)


Lesenswert?

Hi!

Ich habe folgende Problematik: Ein Prozess erstellt für eine 
Verarbeitung mehrere Childs. Nun will ich aber, dass (falls der Parent 
mit SIGINT in die Knie gezwungen wird) seine Kinder noch ihre Arbeit 
fertig machen und der Parent dann (mit dem letzten Child) terminiert.

Ich dachte, dass ich das mit einem Signalhandler für SIGINT in dem mit 
einer wait-schleife auf die terminierung aller kinder gewartet wird, 
bewerkstelligen kann.
1
while (waitpid(-1, NULL, WNOHANG) > 0);

Aber leider funktioniert es (wie so oft) nicht wie gewollt. Ich habe 
dann auch versucht die weitergabe von SIGINT an die Kinder zu verhindern 
(wie hier beschrieben 
http://stackoverflow.com/questions/6803395/child-process-receives-parents-sigint) 
aber so terminiert das programm nie.

mfg

von Murkser (Gast)


Lesenswert?

Plural von Child ist Children!

von imonbln (Gast)


Lesenswert?

Ich denke du wirst einen Deamon schreiben müssen,
Dann erreicht dich das SIGINT nicht mehr,

wie das geht sagt dir google oder der Text hier
http://www.enderunix.org/docs/eng/daemon.php

Dein Problem wie du schon gemerkt hast wird dann sein das
dein deamon, dann entweder selbst Terminieren muss wenn er
Fertig ist oder aber eine Signal von bewusst gesendet werden muss.

Unter Unix gibt es hierfür das Tool kill.
und meistens hackt man die Deamons so das sie ihre pid in eine Datei 
unter /var/tmp schreiben, ansonsten musst du beim Bewusten beenden das 
komando ps bemühen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christian H. schrieb:
> Aber leider funktioniert es (wie so oft) nicht wie gewollt.

Wie funktioniert es denn, und wie wäre es gewollt?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.