in reply to Kill a process in Perl
#! perl -slw use strict; use threads; use threads::shared; $|++; my $pid :shared; async { $pid = system 1, 'perl', q[-E"sleep 600; say 'Done!'"]; sleep 30; kill 2, $pid; undef $pid; }->detach; my $c = 0; ## get on with the rest of your program while( sleep 1 ) { print ++$c, ' Is it done yet?'; last unless $pid; } __END__ C:\test>\perl32\bin\perl.exe junk3.pl 1 Is it done yet? 2 Is it done yet? 3 Is it done yet? ... 27 Is it done yet? 28 Is it done yet? 29 Is it done yet? 30 Is it done yet? Terminating on signal SIGINT(2) 31 Is it done yet?
If you don't need to do anything else whilst you wait for it, then a simple:
#! perl -slw use strict; my $pid = system 1, 'perl', q[ -E"sleep 600; say 'Done!'"]; sleep 30; kill $pid, 2; ## rest of program
will do it.
|
|---|