【问题标题】:taskkill from PHP exec来自 PHP exec 的 taskkill
【发布时间】:2010-12-23 15:24:55
【问题描述】:

我刚刚尝试执行此操作:

function kill_hr(){

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

    print_r($output);

    echo "<br />".$return;

}

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

数组 ( ) 1

当进程不存在时:

数组 ( ) 128

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

【问题讨论】:

    标签: php windows exec taskkill


    【解决方案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;
    }
    

    如果uper.exe 已成功终止,或者它一开始没有运行,该函数将返回true

    编辑:重新阅读您的帖子,您可以尝试以下操作;使用 runas 以您的 Web 服务器用户身份启动命令提示符(从管理命令提示符):

    runas /user:account@machine cmd
    

    然后,您将拥有一个作为 Web 服务器运行的命令提示符,您可以从那里发出 taskkill 命令。然后您可能会看到一条文本错误消息。

    【讨论】:

    • 我认为我没有很好地解释我的问题! :) 问题是 taskkill 没有成功,因为它没有返回 0,我可以在任务列表中看到 uper.exe 没有被杀死 - 我的问题是为什么它没有被杀死以及如何被杀死我可以这样做吗?
    • 尝试以 Web 服务器用户身份启动命令提示符(找出运行 Apache 或 IIS 的用户),然后从那里运行 taskkill 命令。这可能会在命令行上给您一条错误消息。
    【解决方案2】:

    我以前也遇到过这个问题 - 一些过去有效的方法:

    解决方案 #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 启动后台进程 - 我不确定返回值是什么,因此您需要进行试验。

    【讨论】:

    • 感谢您的回复和有用的建议:我都试过了,cmd 解决方案给了我和以前一样的结果。但是一开始它返回了成功 - 很兴奋,但我看到它没有终止进程但仍然返回成功 - 发生了什么?我怎样才能让它杀死!
    • 当您使用start 时,您会从start 命令获取返回值,而不是从taskkillstart 成功,但你不知道taskkill 是否成功。
    【解决方案3】:

    除其他答案外,命令返回的数值在 Windows 中称为 ERRORLEVEL。在命令行上使用 taskkill 时,您可以使用

    使返回的最后一个错误级别可见
    echo %ERRORLEVEL%
    

    【讨论】:

      【解决方案4】:

      谢谢大家的帮助 - 我终于设法用这个杀死了这个进程:

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

      我相信它也适用于 exec,但重要的是 /F 强制它! :)

      【讨论】:

      • 不要使用 " " 标签,这在 Win7 x64 中不起作用。没有它,它工作得很好,谢谢!
      猜你喜欢
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多