运行PHP exec()异步/多进程

时间:2010-07-26 21:36:23

标签: php

我目前正在PHP脚本中运行这些行:

foreach ($list as $route)
{
    exec('php-cgi ./nextbus-route_stop_predictions.php route=' . $route['route_id']);
}

nextbus-route_stop_predictions.php需要大约15秒才能运行,而exec()大约运行12次。我想知道PHP是否能够运行这些命令行而无需等待前一个exec()的输出。所以基本上,我想运行这个异步/多进程。

更新

对于仍在寻找答案的人,我使用了nohup并将输出传输到/dev/null

2 个答案:

答案 0 :(得分:3)

如果您使用* nix,

pcntl_fork()可能会有所帮助。

  

pcntl_fork()函数创建一个子进程,该进程与父进程的PID和PPID不同。有关fork如何在系统上运行的具体详细信息,请参见系统的fork(2)手册页。

答案 1 :(得分:0)

如果你正在运行php作为Apache模块,你可以做到这里提到的技巧

http://joseph.randomnetworks.com/archives/2005/10/21/fake-fork-in-php/

exec("php-cgi ./nextbus-route_stop_predictions.php route=" . $route['route_id'] . " 2>/dev/null >&- < &- >/dev/null &");

基本上重新路由stderr,stdout并将进程发送到后台。