无法杀死Perl中的进程

时间:2012-12-30 08:07:08

标签: windows perl process exe

我编写了一个代码来运行exe文件,如下所示:

 #!/usr/local/bin/perl     
 use Cwd;                      
 $directory   = 'e:/USER/';
 chdir($directory) or die ; 
 system("Bnc25-Windows.exe -nw");

现在我想写另一个代码来阻止它。我写道:

 #!/usr/local/bin/perl     
 use Cwd;                      
 $directory   = 'e:/USER/';
 chdir($directory) or die ; 
 kill Bnc25-Windows.exe ; 

但它不起作用,我在任务管理器窗口中看到exe文件正在运行。 我真的不知道问题出在哪里。谢谢你的帮助

3 个答案:

答案 0 :(得分:4)

您使用的是Windows。 Windows中没有kill命令。您可以使用taskkill

再次使用system功能。

system("taskkill /im Bnc25-Windows.exe /f");

答案 1 :(得分:4)

Perl kill function需要(信号名称/编号和)要杀死的进程的数字ID,而不是其名称。

作为一般建议,我强烈建议您使用以下代码开始您的代码:

use strict;
use warnings;

并修正他们产生的任何错误和警告。

例如,如果您使用问题中的代码完成了此操作,那么(在Bnc25-Windows.exe周围修复缺失的引号并在第一次声明{{1}之前修复缺失的my之后,以便代码通过$directory检查)收到以下警告:

strict

这会告诉你Unrecognized signal name "Bnc25-Windows.exe" at test.pl line 7. 正试图解析kill作为信号名称,这会暗示你尝试使用它的方式有问题,并且希望能够让您查看文档(请参阅上面的链接),这两个文档都描述了在Perl中使用"Bnc25-Windows.exe"函数的正确方法,并且还链接到portability warnings关于在非文档中使用它Unix系统。

答案 2 :(得分:0)

killPID杀死进程。您需要killall按可执行文件名终止进程。两者都是unix命令,可通过cygwin(您可能正在使用)获得。