#! 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?