[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