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

PHP5, Shell_exec waiting for spawned linux shell tasks to finish

我正在尝试从 PHP5 启动一个 linux shell 脚本,它将 运行 持续 24 小时,但我希望网页在 return 内秒。我虽然可以通过生成任务的脚本来解决这个问题,但它似乎不起作用。

几天来我一直在四处寻找解决方案或 "one shot / fire and forget" 选项,但一无所获。

下面的例子说明了这个问题。

在 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' 之前网页没有 return。如果我在终端中手动 运行 脚本,它会立即 return 并生成循环。

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

希望大家能帮帮我,不胜感激。

回答你的问题:

  1. 您可以开始查看 pcntl_fork. Or you may check this。基本上,您正在使用本机 fork 来 fork 长 运行 进程,因此您的 php 前端不必等待。
  2. 如果您喜欢冒险,可以将您的 "job"(您对这个漫长的 运行 过程的请求)放入数据库中。然后,cron 作业会检查数据库中的传入请求,它就是执行该进程的作业。
  3. 另一种方法是使用resque,但请不要在这一点上费心。