如何在后台使用phppcntl_fork到运行函数

How to use php pcntl_fork to run function in background

我有两个功能。我想 运行 在后台使用 mysql 连接并且不向浏览器返回任何错误或任何内容的功能之一。另一个函数我想 运行 其中 returns 数据到浏览器。

我使用 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();
}

在这种情况下,returns 数据库错误编号 2006 只能在 function_background() 中发生。

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

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

谢谢。

如评论中所述,pcnt_fork() 用于分叉现有进程,对于 运行 在后台将其设置为您可以简单地使用以下方法实现:

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

其中:

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

并检查进程是否 运行ning

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

    return true;
}