2012-11-06 82 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