Not logged in. · Lost password · Register

lo_pez
Affe mit Süßwaren
Avatar
Member since Jan 2004
62 posts
Subject: trsh & zombies - was sonst?
Hi Leute,

ich habe ein kleines ziemlich konfuses Problem mit meiner trsh:
Ich versuche einen Signal-Handler für SIGCHLD einzurichten, damit später mal brav alle Zombies gepfählt werden können. Zunächst lasse ich den Handler aber mal leer.
Wenn ich einen Hintergrundprozess (zB 'kedit&') starte und ihn dann wieder zumache, dann beendet sich trsh automatisch.
Das passiert nicht, wenn ich den Signalhandler einfach weglasse...

Irgendwer eine Idee woran das liegen könnte? Nicht dass ich irgendwas simples vergessen habe...

Grüße,
lo_pez
"Macht's gut ihr Trottel!" [Homer]
frahi
Avatar
Member since Nov 2002
777 posts
Das Standardverhalten bei SIGCHLD Empfang ist ignorieren, d.h. es wird nichts unterbrochen.
Wenn du den Childhandler installierst, dann wird die Funktion im regulaeren Programm unterbrochen. Wenn der Childhandler zuende ist, wird das regulaere Programm fortgesetzt. Allerdings schlaegt die Funktion, die unterbrochen wurde eventuell fehl, setzt errno und liefert einen Fehler zurueck.

Beheben kann man das Problem mit 3 Moeglichkeiten:
1. Jede Funktion die unterbrochen werden kann, nach derem Aufruf pruefen und gegebenenfalls neu starten.

2. Beim sigaction das flag SA_RESTART mit setzen, damit werden solche Funktionen automatishc neu gestartet.

3. Das Signal blockieren und bei geeigneter Zeit wieder deblockieren, oder mittels sigpending regelmaessig abfragen, ob eines gekommen ist.

4. In die anderen Threads im Forum schauen, da steht des naemlich alles schonmal. Nochmal schreib ichs net!

Fuer die trsh kann ich mir nur mit 1. und 2. eine vernuenftige Lsg vorstellen.
lo_pez
Affe mit Süßwaren
Avatar
Member since Jan 2004
62 posts
Subject: thx
Quote by frahi:
Wenn du den Childhandler installierst, dann wird die Funktion im regulaeren Programm unterbrochen. Wenn der Childhandler zuende ist, wird das regulaere Programm fortgesetzt. Allerdings schlaegt die Funktion, die unterbrochen wurde eventuell fehl, setzt errno und liefert einen Fehler zurueck.
hmm, klingt soweit plausibel, mir ist nur nicht klar, was bei mir unterbrochen wird, dass dann dazu führt, dass sich trsh beendet.

Quote by frahi:
1. Jede Funktion die unterbrochen werden kann, nach derem Aufruf pruefen und gegebenenfalls neu starten.
2. Beim sigaction das flag SA_RESTART mit setzen, damit werden solche Funktionen automatishc neu gestartet.

hat lösung 2 gegenüber lösung 1 irgendeinen nachteil? immerhin sieht 1 nach mächtig viel code aus...

Quote by frahi:
4. In die anderen Threads im Forum schauen, da steht des naemlich alles schonmal. Nochmal schreib ichs net!

da habe ich mich schon gründlich umgeschaut, sonst wäre ich nie soweit gekommen :-)  habe eben den zusammenhang zwischen unterbrechung und programm-beendigung nicht gesehen...
thx für die infos.
"Macht's gut ihr Trottel!" [Homer]
snehls
Superfreund aka Der Schwede
Avatar
Member since Oct 2002
750 posts
Quote by lo_pez:
hmm, klingt soweit plausibel, mir ist nur nicht klar, was bei mir unterbrochen wird, dass dann dazu führt, dass sich trsh beendet.

naja irgendwoher kommt ein SIGCHLD (z.b. weil ein hintergrundprozess zuende ist), dein programm hängt gerade an igrendeinem punkt (wartet auf ne eingabe o.ä.), dann wird der signalhandler aktiv "schaut" nach was er machen soll, macht das was zu tun ist oder wenn gar nichts zu tun ist springt er zurück ins programm. die funkion die unterbrochen wurde hat aber nen fehler geliefert(weil sie mit der unterbrechung nicht klar kommt, soweit ich mich erinner sind nur manche funktionen reentrant) und jetz beendet sich deine trsh.
am einfachsten lässt sich das mit SA_RESTART verhidnern
"I will speculate that today’s single-threaded applications as actually used in the field could actually see a performance boost for most users by going to a dual-core chip, not because the extra core is actually doing anything useful, but because it is running the adware and spyware that infest many users’ systems and are otherwise slowing down the single CPU that user has today."
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen