http://qs321.pair.com?node_id=1060411

sjwnih111 has asked for the wisdom of the Perl Monks concerning the following question:

Hello everyone, I'm using the following to call a child process from my script and then time it out:
my $pid = fork(); if (!$pid) { system($command); } else { sleep $max_time; print "Since $max_time minutes have elapsed, w +ill kill process with PID $$ "; system("TASKKILL /F /T /PID $$"); }
Two problems, and I'm not sure what they're from. (1) After completing the child process on time, I get a popup from windows that says "perl.exe has stopped working..." (2) When I look in task manager, there are a bunch of Taskill.exe that seem to be left over even after I have closed the processes they were trying to kill... If anyone has any idea what's going on it would be very helpful.

Replies are listed 'Best First'.
Re: Terminate process tree in windows
by Corion (Patriarch) on Oct 30, 2013 at 19:24 UTC

    While fork() does kinda work on Perl on Windows, it is only emulated by Perl. Windows only ever sees one Perl process, no matter how much you fork() from it. When you use taskkill, you kill off the one Perl process.

    In my experience, it's best not to use fork() on Windows and use threads or plain subprocesses instead. This usually requires a different approach in the program though.

Re: Terminate process tree in windows
by bojinlund (Monsignor) on Oct 31, 2013 at 06:19 UTC