1

我有两个功能。我想通过 mysql 连接在后台运行一个函数,并且不向浏览器返回任何错误或任何内容。我要运行的另一个函数将数据返回给浏览器。

我使用 php pcntl_fork 如下:

$pid = pcntl_fork();
switch ($pid) {
  case -1:
    $this->function_background();
    $this->function_return();
    exit();
  case 0:
    $this->function_background();
    break;
  default:
    $this->function_return();
}

在这种情况下,它返回数据库错误号 2006,它只能在function_background().

我希望该功能function_background()通过 mysql 连接在后台完全独立地运行,并且不会因为它的错误或任何东西而干扰浏览器。function_return()并向浏览器发送消息。

感谢任何帮助。如果有人也可以向我指出详细信息,那就太好了。

谢谢。

4

1 回答 1

2

正如评论中的 pcnt_fork() 用于 fork 现有进程,为了在后台运行它,您可以简单地使用以下方法实现一些东西:

$pid = shell_exec(sprintf('%s > /dev/null 2>&1 &', $command));

在哪里:

  • > /dev/null 表示标准输出将被丢弃;
  • 2>&1 表示标准错误将在标准输出上(因此被丢弃);
  • & 允许将此命令作为后台任务运行。

并检查进程是否正在运行

$procResult = shell_exec(sprintf('ps %d', $pid));
if (count(preg_split("/\n/", $procResult)) > 2) {

    return true;
}
于 2015-03-14T13:13:43.213 回答