Thread Start/stop a process
(8 answers)
Opened by Emeto at 2012-01-26 10:58
ungetestet, aber so ungefähr sollte es gehen:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #!/usr/bin/perl use strict; use warnings; my $commandline='"Editor.exe" /CAS-FILE=$file'; my $timeout=160; #Sekunden local $SIG{CHLD}='IGNORE'; my $pid=fork; die("Fork failed!") unless(defined($pid)); if($pid) { my $start=time(); while($start+$timeout > time()) { sleep 1; last unless(kill(0,$pid)); } # Zeit abgelaufen und Prozess läuft noch if($start+$timeout <= time() && kill(0,$pid)) { # Prozess beenden # erster Versuch # freundlich fragen kill(15,$pid); sleep 2; # zweiter versuch if(kill(0,$pid)) { kill(15,$pid); sleep 2; # das dritte mal Prozess abwürgen! kill(9,$pid) if(kill(0,$pid)); } } } else { # externes Programm mit der aktuellen Prozess ID starten exec($commandline); } |