PHP5,Shell_exec正在等待派生的linux Shell任务完成


PHP5, Shell_exec waiting for spawned linux shell tasks to finish

我正试图从PHP5启动一个linux shell脚本,该脚本将运行24小时,但我希望网页在几秒钟内返回。我认为这可以通过生成任务的脚本来解决,但它似乎不起作用。

几天来,我一直在四处寻找解决方案或"一次射击/忘记"选项,但没有任何运气。

以下示例显示了问题。

在PHP 5中,我进行了以下调用之一(在这一点上尝试了很多)

passthru("dummy_script.sh");

system("dummy_script.sh");

shell_exec("dummy_script.sh");

伪脚本如下所示:

#!/bin/sh
{
  while true                             
  do 
    sleep 1
  done
} &

我可以看到这个过程开始了,但在我制作"killall dummy_script.sh"之前,网页不会返回。如果我在终端中手动运行脚本,它会立即返回并产生循环。

有人知道在这里我可以在不让网页等待的情况下生成任务的方法吗?

希望你们能帮我,我将不胜感激。

回答您的问题:

  1. 您可以开始查看pcntl_fork。或者你可以检查一下。基本上,您使用本机fork来派生长时间运行的进程,这样您的php前端就不必等待了
  2. 如果你有冒险精神,你可以把你的"工作"(你对这个长时间运行的过程的请求)放在DB中。然后,一个cron作业检查DB中是否有传入请求,它就是执行该过程的那个作业
  3. 另一种方法是使用resque,但在这一点上不要麻烦