[Vienna-pm] unterschiedliches SIGNAL-Trapping in den Childs und der Mama

Leopold Toetsch lt at toetsch.at
Mon Apr 2 14:07:05 PDT 2007


Am Montag, 2. April 2007 12:47 schrieb gooly at gmx.at:
> Hallo,
>
> ich hab ein Perl.prg, das mehrere (threaded) Kinder zeugt.
> Da soll nun jedes ein eigenes gracefull-die hinlegen - wie geht das?

Untrivial bis gar nicht: threads und signal handling vertragen sich nicht 
besonders. Du willst viel eher Prozesse forken nehme ich an ;)

Nach POSIX ist es nicht/kaum spezifiziert[1], welcher der threads überhaupt 
das gesendete Signal erhält. Der Prozess beinhaltet je nach System und 
Implementierung alle Threads oder nicht.

Auf der sicheren Seite bist du nur, wenn du alle Signale blockierst, und genau 
für den einen emfangenden Thread freischaltest [2].

Eine Unbekannte dazwischen ist noch die Implentierung innerhalb Perl selber, 
aber ich nehme mal an, dass das halbwegs transparent ist und die libc 
Dokumentation für die Anwendung in Perl noch gültig ist (modulo der 
Signalhandler selber natürlich).

leo

[1]
e.g. aus
file:///home/lt/doc/susv3/functions/xsh_chap02_04.html#tag_02_04_01 [2]

At the time of generation, a determination shall be made whether the signal 
has been generated for the process or for a specific thread within the 
process. Signals which are generated by some action attributable to a 
particular thread, such as a hardware fault, shall be generated for the 
thread that caused the signal to be generated. Signals that are generated in 
association with a process ID or process group ID or an asynchronous event, 
such as terminal activity, shall be generated for the process.

[2] sorry, aber die docs musst du IIRC downloaden und lokal installieren

[3] man sigaction; perldoc POSIX; info libc


More information about the Vienna-pm mailing list