From: Marc Hoersken Date: Sat, 6 Apr 2013 09:33:55 +0000 (+0200) Subject: ftp.pm: Made Perl testsuite able to kill Windows processes X-Git-Tag: curl-7_30_0~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efa5488448771f9cf6554b137d388ea5f3dc90c6;p=thirdparty%2Fcurl.git ftp.pm: Made Perl testsuite able to kill Windows processes --- diff --git a/tests/ftp.pm b/tests/ftp.pm index 6a46e76513..ae41849d89 100644 --- a/tests/ftp.pm +++ b/tests/ftp.pm @@ -111,6 +111,17 @@ sub killpid { if($tmp =~ /^(\d+)$/) { my $pid = $1; if($pid > 0) { + if($^O eq "msys") { + my $filter = "-fi \"PID eq $pid\""; + my $result = `tasklist $filter 2>nul`; + if(index($result, "$pid") != -1) { + print("RUN: Process with pid $pid requested to quit\n") + if($verbose); + system("taskkill $filter >nul 2>&1"); + push @signalled, $pid; + next; # it is a Windows PID + } + } if(kill(0, $pid)) { print("RUN: Process with pid $pid signalled to die\n") if($verbose); @@ -134,6 +145,13 @@ sub killpid { while($twentieths--) { for(my $i = scalar(@signalled) - 1; $i >= 0; $i--) { my $pid = $signalled[$i]; + if($^O eq "msys") { + my $filter = "-fi \"PID eq $pid\""; + my $result = `tasklist $filter 2>nul`; + if(index($result, "$pid") != -1) { + next; # the Windows PID still exists + } + } if(!kill(0, $pid)) { print("RUN: Process with pid $pid gracefully died\n") if($verbose); @@ -155,6 +173,15 @@ sub killpid { print("RUN: Process with pid $pid forced to die with SIGKILL\n") if($verbose); kill("KILL", $pid); + if($^O eq "msys") { + my $filter = "-fi \"PID eq $pid\""; + my $result = `tasklist $filter 2>nul`; + if(index($result, "$pid") != -1) { + print("RUN: Process with pid $pid forced to quit\n") + if($verbose); + system("taskkill -f $filter >nul 2>&1"); + } + } # if possible reap its dead children waitpid($pid, &WNOHANG); push @reapchild, $pid;