PHP5,Shell_exec等待生成的linux shell任务完成

时间:2015-02-06 08:46:12

标签: php linux multithreading shell sh

我正在尝试从PHP5启动一个运行24小时的Linux shell脚本,但我想让网页在几秒钟内返回。我虽然这可以通过制作任务的脚本产生来解决,但它似乎不起作用。

我一直在寻找解决方案或者一次性射击/射击并忘记"选择几天没有运气。

以下示例显示了问题。

在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 个答案:

答案 0 :(得分:0)

回答你的问题:

  1. 您可以开始查看pcntl_fork。或者您可以查看this。基本上,您使用本机fork来分叉长时间运行的进程,因此您的php前端不必等待。
  2. 如果你喜欢冒险,你可以把你的“工作”(你的请求这个长时间运行的过程)放在数据库中。然后,一个cron作业检查数据库是否有传入的请求,它是执行该过程的那个。
  3. 另一种方法是使用resque,但此时不要打扰。