[英]taskkill from PHP exec
我刚刚尝试执行此操作:
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
强制执行! :)
除其他答案外,该命令返回的数值在Windows中称为ERRORLEVEL。 在命令行上使用taskkill时,您可以使用以下命令使返回的最后一个错误级别可见
echo %ERRORLEVEL%
我以前曾遇到过这个问题-过去有一些成功的方法:
解决方案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启动后台进程-我不确定返回值是多少,因此您需要进行实验。
$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
命令。 然后,您可能会看到文本错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.