如何杀死用open()打开的进程

时间:2011-02-06 03:30:02

标签: windows perl

我试图杀死我在Win32(XP)上的Perl后台打开的进程 我尝试了几件事....似乎没有工作......

$pid = open( CMD, "| cmd.exe > C:\\cmdout.txt" );

要杀死这个后台进程尝试了几件事...... :(

  1. system('taskkill /F /IM cmd.exe');

  2. system("taskkill /F /pid $pid");

  3. close CMD || warn "cmd exited $?";

  4. 选项2从不起作用,试图打印PID打印的值,系统中的实际值不同。 选项1有效,但我觉得这个过程仍然在后台运行,因为在我结束这个过程后,我等待一段时间并重新开始这个过程......

    请帮忙

    -Thanks

2 个答案:

答案 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进程都死掉。