我在MySQL中有很多行。我將在這些行中的每個行上對ip執行ping操作,所以我想分解負載。我製作了一個腳本,爲數據庫中的每100行運行一個新進程。問題在於,父腳本似乎在開始下一個腳本之前要等待每個腳本完成,這會使整個目的失效。如何確保PHP實例在後臺運行?
這是父腳本
for($i = 0; $i < $children_num; $i++)
{
$start = $bn["dots_pr_child"] * $i;
exec("php pingrange.php $i $start $bn[dots_pr_child]");
}
值得一提的是,這些孩子的過程中運行exec("ping")
每行的MySQL一次的重要組成部分的代碼。我認爲這是問題的一部分。
我會根據要求發佈更多信息和代碼。
有沒有辦法強制PHP實例在後臺運行,並且前臺繼續運行?最好父母腳本應該採取0.0001 sek並打印「完成」。目前它運行120秒。
感謝您的任何和所有幫助
編輯:我試過的過程後添加&
。人們會認爲這會使exec函數立即返回,但不會。
編輯:嘗試exec("php pingrange.php $i $start $bn[dots_pr_child] 2>&1 &");
沒有成功
編輯:嘗試exec("nohup php pingrange.php $i $start $bn[dots_pr_child] &");
沒有成功
這是做的伎倆!你願意解釋這個魔法嗎? :D – Hubro 2011-03-30 04:08:28
@Codemonkey:'>/dev/null' = STDOUT到'/ dev/null','2>/dev/null' STDERR到'/ dev/null'。 – 2011-03-30 04:40:40
,只要有輸出流附加到它所產生的進程,進程就無法進入後臺。所以重定向那些從PHP過程中「分離」出來的。 – edorian 2011-03-30 23:40:09