3

我刚刚尝试执行此操作:

function kill_hr(){

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

    print_r($output);

    echo "<br />".$return;

}

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

数组 ( ) 1

当进程不存在时:

数组 ( ) 128

我试图弄清楚为什么当进程存在时它给我一个 1 - 这是权限问题吗?如果是这样,我该如何纠正这个问题?

4

4 回答 4

8

谢谢大家的帮助-我终于设法使用以下方法终止了该过程:

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

我相信它也可以与 exec 一起使用,但重要的是/F强制它!:)

于 2009-12-06T19:35:24.827 回答
3

我以前遇到过这个问题 - 过去有一些工作:

解决方案#1

taskkill使用 Windowsstart命令启动:

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

解决方案#2

使用以下命令打开一个新命令行cmd.exe

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

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

于 2009-12-05T23:01:53.787 回答
3

除了其他答案之外,该命令返回的数值在 Windows 中称为 ERRORLEVEL。在命令行上使用 taskkill 时,您可以使用以下命令使返回的最后一个错误级别可见

echo %ERRORLEVEL%
于 2009-12-05T23:05:06.137 回答
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从那里发出命令。然后您可能会看到一条文本错误消息。

于 2009-12-05T22:30:05.380 回答