2012-11-06 124 views
0

我有下面的PHP代碼:了shell_exec阻塞直到完成,我想它是不可阻擋

shell_exec("(traceroute odesk.com > trace.txt;echo 'traceIsDone'>>trace.txt) &"); 

這條線需要50秒完成,它曾與平,當我執行的行一個終端窗口立即返回:

(traceroute odesk.com > trace.txt;echo 'traceIsDone'>>trace.txt) & 

我怎麼能執行該命令,並立即後已PHP轉到下一行?那麼不等待shell_exec命令完成?

+0

如果我使用popen方法的代替了shell_exec它不會阻止。我在網頁中使用這個,用戶會做幾個請求來獲得總跟蹤。不知道是否popen導致內存泄漏,因爲我忽略了文件句柄,並且從不關閉它。 – HMR

回答

2

你應該使用popen()

打開一個管道通過派生由命令給出的指令執行的處理。

它說它分叉命令,即它啓動它在一個新的線程,所以它不會阻止你的主線程。所以我想這就是你想要使用的。

您可以使用它非常像fopen()(如果您熟悉它),使用fgets(),fgetss()fwrite()

popen() in the PHP Manual