我刚刚尝试执行了以下操作:
function kill_hr(){
exec("taskkill /IM uper.exe", $output = array(), $return);
print_r($output);
echo "<br />".$return;
}
然而,输出结果非常不实用:
数组() 1
当进程不存在时,输出为:
数组() 128
我正在努力找出为什么进程存在时它会给我一个1-这是权限问题吗?如果是,我该如何解决?
$output = shell_exec('taskkill /F /IM "uper.exe"');
我相信使用exec也可以实现,但重要的是强制使用/F
参数! :)
我之前也遇到过这个问题,以下是一些解决方法:
解决方案 #1
使用Windows的start
命令启动taskkill
:
exec('start /B taskkill /IM notepad.exe', $output = array(), $return);
解决方案 #2
使用cmd.exe
打开一个新的命令行窗口:
exec('cmd /c taskkill /IM notepad.exe', $output = array(), $return);
**注意:我以前都用过这两种方法在PHP中启动后台进程,但我不确定返回值会是什么,所以你需要进行实验。
start
命令时,会返回 start
命令的返回值,而不是 taskkill
的返回值。虽然 start
命令执行成功了,但您并不知道 taskkill
是否执行成功。 - Vegard Larsenecho %ERRORLEVEL%
返回值$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;
}
如果uper.exe
成功终止或者一开始就没有运行,该函数将返回true
。
编辑:重新阅读您的帖子,您可以尝试以下操作:使用runas
以您的Web服务器用户身份启动命令提示符(从管理员命令提示符):
runas /user:account@machine cmd
然后您将拥有一个作为Web服务器运行的命令提示符,您可以从那里发出taskkill
命令。然后您可能会看到一个文本错误消息。
taskkill
命令。这可能会在命令行上为您提供错误消息。 - Vegard Larsen