Christoph Zurnieden: (LINUX) Den Schuft herausfinden, der ein Signal schickt ;-)

Beitrag lesen

Hallo,

Es sieht ausserdem so aus, als ob das Skript von irgendwem per
Signal abgeschossen wird. Und nun wuerde ich gerne wissen, ob es
eine Moeglichkeit gibt, herauszufinden, wer in meinem System wem
Signale schickt bzw. wer einem Perl-Skript ein Signal geschickt hat.
Das muss doch irgendwie gehen.

"Irgendwie" ja, allerdings tragen die normalen Signale (Dein Script wird wohl ein SIGINT oder SIGKILL bekommen) keinen Absender.
Zumindest keinen direkt lesbaren ;-)

Zuerst empfehle ich mal die Lektüre von perldoc perlipc, da steht
schon einiges über Interprocess Communication drin. Außerdem gibt es
noch das Modul POSIX, mit dem sich viele (alle?) POSIX-Funktionen
aufrufen lassen.

'perldoc POSIX' (funktioniert zumindest hier)

The POSIX module permits you to access all (or nearly all)
       the standard POSIX 1003.1 identifiers.

und ein wenig später auch noch die Warnung:

Perl does not attempt to verify POSIX compliance.  That
       means you can currently successfully say "use POSIX",  and
       then later in your program you find that your vendor has
       been lax and there's no usable ICANON macro after all.
       This could be construed to be a bug.

Das sind also nicht gerade viele (POSIX 1003.1 ist auch schon etwas älter)

Was Du auf jeden Fall gebrauchen kannst, ist:

sigaction
               Detailed signal management.  This uses
               POSIX::SigAction' objects for the action' and
               oldaction' arguments.  Consult your system's                sigaction' manpage for details.

Synopsis:

sigaction(sig, action, oldaction = 0)

Returns `undef' on failure.

Zumindest unter C kann man damit alle Signale außer SIGKILL abfangen und zumindest eine Ausgabe erzeugen, an welchem Punkt dies geschehen ist. Das sollte eigentlich schon einmal _etwas_ weiterbringen.

BTW: Bist Du Dir auch sicher Dir kein SIGSEGV eingefangen zu haben? ;-)

Wenn es also eine passende POSIX-Funktion gibt, dann
kannst du damit feststellen, woher das Signal kommt. Und alles andere
als POSIX-Funktionen hat sowieso keinen Wert auf 'nem Unix-System :)

Hey, und was ist mit den GNU-Extensions? ;-)))

so short

Christoph Zurnieden