我刚刚尝试执行此操作:
function kill_hr(){
exec("taskkill /IM uper.exe", $output = array(), $return);
print_r($output);
echo "<br />".$return;
}
但是,输出是这个,它不是很有用:
Array()1
当该过程不存在时:
Array()128
我正在尝试解决为什么在进程存在时它给我1 - 这是权限问题吗?如果是这样,我该如何纠正?
答案 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
命令。然后您可能会看到文本错误消息。