如何在后台使用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;
}
我有两个功能。我想 运行 在后台使用 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;
}