来自PHP exec的taskkill

时间:2009-12-05 22:08:15

标签: php windows exec taskkill

我刚刚尝试执行此操作:

function kill_hr(){

    exec("taskkill /IM uper.exe", $output = array(), $return);

    print_r($output);

    echo "<br />".$return;

}

但是,输出是这个,它不是很有用:

  

Array()1

当该过程不存在时:

  

Array()128

我正在尝试解决为什么在进程存在时它给我1 - 这是权限问题吗?如果是这样,我该如何纠正?

4 个答案:

答案 0 :(得分:7)

谢谢大家的帮助 - 我终于设法用这个来杀死这个过程:

$output = shell_exec('taskkill /F /IM "uper.exe"');

我相信它也适用于exec,但重要的部分是/F迫使它! :)

答案 1 :(得分:3)

除了其他答案之外,该命令返回的数值在Windows中称为ERRORLEVEL。在命令行上使用taskkill时,可以使用

使返回的最后一个errorlevel可见
echo %ERRORLEVEL%

答案 2 :(得分:2)

我之前遇到过这个问题 - 过去的一些事情:

解决方案#1

使用Windows taskkill命令启动start

exec('start /B taskkill /IM notepad.exe', $output = array(), $return);

解决方案#2

使用cmd.exe

打开一个新的命令行

exec('cmd /c taskkill /IM notepad.exe', $output = array(), $return);

**注意*:我过去曾使用这两种方法从PHP启动后台进程 - 我不确定返回值是什么,因此您需要进行实验。

答案 3 :(得分:1)

$return值是程序返回的值。在Windows中,返回值0和1通常用于表示成功,因此您可以轻松判断终止何时成功。

但是,返回值128是任意的,这意味着taskkill的程序开发人员自己决定了它。 128可能意味着该过程不存在。

遗憾的是,似乎没有任何文档记录taskkill的返回值。

如果您的目标是阻止uper.exe出现,则返回值128和1都可以接受,并且您的代码变为:

function kill_hr()
{
    exec("taskkill /IM uper.exe", $output = array(), $return);
    return $return == 1 || $return == 128;
}

如果true成功终止,或者如果它首先没有运行,该函数将返回uper.exe

修改:重新阅读您的帖子,您可以尝试以下方法;使用runas作为Web服务器用户(从管理命令提示符)启动命令提示符:

runas /user:account@machine cmd

然后您将有一个命令提示符作为您的Web服务器运行,您可以从那里发出taskkill命令。然后您可能会看到文本错误消息。