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

标签 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. 关闭CMD ||警告“cmd 退出 $?”;

选项 2 从不工作 尝试打印 PID 打印的值与系统中的实际值不同。 选项 1 有效,但我觉得该过程仍在后台运行,因为在我结束该过程后,我等待一段时间并重新启动该过程...

请帮忙

-谢谢

最佳答案

我对你的情况做了一些尝试。显然启动了两个 cmd.exe,父级具有 open 返回的 PID,其子级执行命令。

第二种情况部分有效,它杀死了父级,但子级仍在运行。使用 /T 选项到 taskkill 你可以强制它杀死所有的 child :

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 进程终止。

关于windows - 如何杀死用open()打开的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911366/

相关文章:

windows - WAMP 上的 MongoDB/PHP —— phpinfo 与 php -i

windows - NodeJS : can't run package (windows)

php - 对 PHP move_uploaded_file() 修改的文件的奇怪权限

perl - 加速 Selenium Webdriver

regex - 在perl RE中将。*视为。{0,1024}的任何方法?

html - 我如何根据 Perl 中的类替换一些 HTML 标签?

windows - Amazon S3 的简单且可扩展的非托管替代方案

c - 绕过cmd中的函数system()写入C中某个有空格的路径时的空格问题

c - 为什么我们在运行Perl脚本时需要使用chmod赋予可执行权限,而在运行c程序时却没有这样做?

perl - 使用 Test::WWW::Selenium 或其他方式检测操作系统对话框