Thread ^C in Script abfangen, nach SIG{INT} weitere Befehle ausführen
(6 answers)
Opened by YAPD at 2015-10-04 23:11
Wenn Du direkt mit perlfunc exec ein anderes Programm startest, übernimmt das die PID des aufrufenden Programms, welches selbst beendet wird. Da ist keine Kontrolle oder Rückkehr ins aufrufende Programm mehr möglich.
Wenn Du weißt, dass ein per perlfunc system aufgerufenes Programm maximal X Sekunden brauchen darf, kannst Du mit perlfunc alarm arbeiten und im Fall des Falles das aufgerufene Programm beenden lassen. Das Problem dürfte da aber sein, dass system() auf Beendigung des Kind-Prozesses wartet und den Exitcode des Kindes liefert. Um die PID zu erhalten, müsste da wohl etwas mehr Aufwand getrieben werden. Man könnte Perl selber forken lassen und im Kinds-Teil dann mit exec() das externe Programm starten lassen. Damit hätte man die PID des Kindes, unter der nun das externe Programm läuft. Diese PID könnte man dann im Alarm-Fall auch bearbeiten und ihr Signale via perlfunc kill schicken. meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |