我试图杀死我在Win32(XP)上的Perl后台打开的进程 我尝试了几件事....似乎没有工作......
$pid = open( CMD, "| cmd.exe > C:\\cmdout.txt" );
要杀死这个后台进程尝试了几件事...... :(
system('taskkill /F /IM cmd.exe');
system("taskkill /F /pid $pid");
close CMD || warn "cmd exited $?";
选项2从不起作用,试图打印PID打印的值,系统中的实际值不同。 选项1有效,但我觉得这个过程仍然在后台运行,因为在我结束这个过程后,我等待一段时间并重新开始这个过程......
请帮忙
-Thanks
答案 0 :(得分:2)
我建议您使用Win32::Process
移植并使用其流程管理支持。
答案 1 :(得分:2)
我和你的情况有点玩了。显然启动了两个cmd.exe,父{PID}返回了open
及其子进行命令。
第二种情况部分有效,它会杀死父母,但是孩子仍在继续。使用/T
选项taskkill
可以强制它杀死所有孩子:
system("taskkill /F /T /pid $pid");
您将看到有关两个进程终止的消息:
SUCCESS: The process with PID 3956 child of PID 1864 has been terminated.
SUCCESS: The process with PID 1864 child of PID 580 has been terminated.
第三种情况对我来说似乎很好。关闭文件句柄会使两个CMD进程都死掉。