如何使用php pcntl_fork在后台运行功能

时间:2015-03-14 12:49:33

标签: php mysql multiprocessing pcntl

我有两个功能。我希望在后台使用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()向浏览器发送消息。

感谢任何帮助。伟大的,如果有人可以请指出我的详细信息。

感谢。

1 个答案:

答案 0 :(得分:2)

在评论中,pcnt_fork()用于fork现有进程,为了在后台运行它,您可以使用以下命令实现:

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

其中:

  • > / dev / null表示将丢弃stdout;
  • 2>& 1表示stderr将在stdout上(如此丢弃);
  • &安培;允许将此命令作为后台任务运行。

并检查进程是否正在运行

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

    return true;
}