2011-08-10 104 views
1

可能重複:
php in background exec() function多EXEC命令PHP的

我想從PHP運行兩個EXEC命令。一個是可能運行幾分鐘的腳本,並且只能有一次它的實例。第二個exec只檢查第一個進程是否正在運行,並且可以讓您再次運行或重定向您。代碼是這樣的。

這是主要的過程

$command = '/home/user/active/Nem-Swd.elf 30 > /dev/null 2>&1 & echo $!'; 

這是檢查是否另一種是已經在運行的過程。

exec("ps ax | grep $name 2>&1", $output); 

我知道,PHP的API中,它說:

如果程序開始使用此功能,以便它繼續在後臺運行,該程序的輸出必須重定向到一個文件或另一個輸出流。否則會導致PHP掛起,直到程序執行結束。

但我不明白這意味着什麼。

+0

這意味着您需要將輸出重定向到文件(文本文件,xml文件等),以使您的exec語句在PHP程序退出後繼續運行。 – Kyle

+0

不,是不同的, – ajreal

回答

1

這意味着如果您運行exec命令而不重新路由其輸出,那麼當前的PHP腳本將在終止腳本之前等待該命令完成。既然你把輸出路由到標準輸出,我相信你應該沒問題。如果您剛剛運行exec($commandJob),則會遇到此問題。


看來,這個問題已經有了答案:
php in background exec() function

在最低限度(例如),你需要做到這一點,以使其在後臺運行:
exec("php test.php &");


還有其他方式可以啓動可能值得關注的流程: http://www.php.net/manual/en/book.pcntl.php
http://php.net/manual/en/function.popen.php

+0

它爲什麼還在等待第一個過程完成? – vman

+0

所以你在一行中運行兩個exec,但第二個永遠不會運行? – afuzzyllama

+0

第二個只在第一個完成時才運行。 – vman