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