我的意思是可以從任務管理器更改的設置,如「實時」或「空閒」。 我的腳本佔用了大量資源,並且癱瘓了正在同時運行的GUI程序。我可以在CLI模式下通過設置ini文件或直接從腳本設置php腳本的運行優先級嗎?
我想將它設置爲從腳本閒置的優先級。我不需要它100%快速。
我的意思是可以從任務管理器更改的設置,如「實時」或「空閒」。 我的腳本佔用了大量資源,並且癱瘓了正在同時運行的GUI程序。我可以在CLI模式下通過設置ini文件或直接從腳本設置php腳本的運行優先級嗎?
我想將它設置爲從腳本閒置的優先級。我不需要它100%快速。
在Windows命令行中,你有幾種選擇:
start /b /low program.exe
start /b /high program.exe
start /b /realtime program.exe
start /b /normal program.exe
start /b /abovenormal program.exe
start /b /belownormal program.exe
本身,在PHP中,有pcntl_setpriority()函數。但是,這只是Unix。
對於Windows;這個命令行程序可以讓你改變已經運行的進程的優先級: http://gilchrist.ca/jeff/SetPriority/index.html
你可以在你的PHP腳本中執行exec()來調用這個程序。
@stillstanding提供的答案是完全有效的。我只是想從我自己的實驗中添加一些細節。
如果您的腳本正在使用CPU的50%,則添加/low
它不會使其消耗更少。唯一的區別是具有更高調度優先級的另一個進程出現並需要CPU。當CPU使用率達到99-100%時,您的PHP CLI腳本將受到限制。
換句話說,您需要爲需要它的進程安排更高的優先級,以便機器仍然可以響應。
將start
添加到直接使用exec()
運行的命令中,可能會在使用路徑和參數時引發問題。另外我遇到的問題是啓動的進程被卡在0%的CPU使用率。
這裏是一個工作示例:
$cmd = 'start /b /low /d "C:\php\" php.exe -f ""C:\Data\www\script.php" foo="1" bar="text"';
pclose(popen($command, "r"));
嗯,我做了一個單獨的runphp.bat文件,當用鼠標點擊指向所有的* .php文件,以通過這個文件運行,所以不會有什麼驚喜,如果一個腳本對CPU或內存很重。這個文件的內容很簡單:start/b/belownormal php.exe%1 @echo off pause> nul – rsk82 2010-12-11 08:35:12