2012-10-30 56 views
0

可能重複:
Make PHP wait for Matlab script to finish executing如何運行PHP後臺進程,並獲得返回值

好,由php execute a background process 開始運行後臺進程的偉大工程。問題是,我也需要返回這個過程。對我來說,顯而易見的解決方案是:

$cmd = "($cmd > $outputfile 2>&1 || echo $? > $returnfile) & echo $! > $pidfile"; 
exec($cmd); 

當我運行在命令行上生成的命令時,它的背景和文件都寫滿了預期。問題是,當php exec()運行時,該命令不會進入後臺(至少,exec直到命令結束纔會返回)。我嘗試了nohup的變體,並等待$ pid,但仍然沒有解決方案。

有什麼想法?

+0

其原因是'不允許的系統調用:SYS_pipe' –

+0

如何從不會返回的東西返回值直到它退出? –

+0

可以嘗試添加&開始命令...通常從shell反正這就是我如何開始在背景中的東西 – Brian

回答

0

這很棘手 - 您可能會分叉進程來做其他事情,而保留原來的流程。

http://php.net/manual/en/function.pcntl-fork.php

但是,如果這是一個Web應用程序,有檢索返回代碼或STDOUT回父進程,因爲它在技術上異步(您的請求 - 響應週期之前將有可能最終沒有內置的方式結果可以產生)。

雖然您可以將返回代碼和/或STDOUT存儲到文件以供稍後檢查。