簡體   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