User since
2006-06-12
19
Artikel
BenutzerIn
Hallo Zusammen,
habe hier ein kleines Problem mit dem Signalhandling.
Wenn ich dem Perl Programm ein SIGINT schicke (über STRG-C oder kill -2), dann wird dies an ein externes Programm, dass zu diesem Zeitpunkt in einem system() call läuft, weiter gegeben.
Weiß jemand weshalb perl das Signal nicht selbst verarbeitet und wie ich perl ggf. dazu überreden kann? Witziger witzigerweise wird ein kill -10 behandelt..
Grüße,
Aleks
User since
2005-01-17
14748
Artikel
Admin1
BEGIN {
$SIG{'INT'} = "meineSigInt";
}
sub meineSigInt {
# hier dein eigener Code;)
}
Weiteres z. B. unter
http://www.cs.cf.ac.uk/Dave/PERL/node116.html\n\n
<!--EDIT|GwenDragon|1166102631-->
User since
2006-06-12
19
Artikel
BenutzerIn
Hallo GwenDragon,
danke für den Hinweis, mein Problem ist aber ein anderes. Wie Signalhandler funktionieren ist mir bekannt. Ich wundere mich eben nur, dass ein SIGINT nicht vom perl interpretor interpretiert wird, sondern an das Programm (welches gerade in einem system() ausgeführt wird) weitergegeben wird. Wobei das nur in einer Schleife der Fall ist, in der halt immer wieder ein system() ausgeführt wird. Vor der besagten Schleifen läuft alles wie erwartet..
Das ganze läuft auf einem perl 5.6.1 / solaris.
Gruß,
Aleks
User since
2005-01-17
14748
Artikel
Admin1
Wenn gerade durch einen sytem-Aufruf, also durch eine Shell, ein externes Programm läuft, dann erbt es die Signalhandler von Perl.
User since
2006-06-12
19
Artikel
BenutzerIn
mmh, was meinst Du mit "dann erbt es die Signalhandler von Perl."?
Also den Signalhandler wird es sicherlich nicht erben. Meinst Du vielleicht das Signal als solches? Ich muss dazu erwähnen das in system() kein perl Programm ausgeführt wird, es ist ein kompiliertes binary ©. Das SIGINT wird auch definitiv vom binary abgearbeitet, dass sehe ich auf der Konsole.
Aleks
User since
2005-01-17
14748
Artikel
Admin1
Ich habe mich nicht korrekt ausgedrückt. Ist ja kein Kindprozess.