繁体   English   中英

PHP exec的taskkill

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM