📜  如何在PHP中执行后台进程?

📅  最后修改于: 2022-05-13 01:56:29.182000             🧑  作者: Mango

如何在PHP中执行后台进程?

什么是后台进程,我们为什么需要它们?

在幕后(即在后台)运行且无需用户干预的进程称为后台进程。调试/错误记录、使用 grafana 或 kibana 监控任何系统、用户通知、调度作业以及发布一些数据都是后台进程的典型示例。后台进程通常是由控制进程创建的用于处理计算任务的子进程。创建后,子进程将自行运行,独立于父进程的状态执行任务。

有很多方法可以在后台运行作业。 Crontab、 Java中的多线程、golang 中的 go 例程都是此类情况的示例。

要在 ubuntu 中运行进程,我们只需在终端上键入命令即可。例如,要运行PHP文件,我们使用以下命令:

php filename.php

在PHP中,即使父作业终止,我们也不能直接在后台运行任何进程作业。在我们了解如何在后台运行进程之前,让我们知道如何从PHP脚本或程序执行终端命令。为了实现这个功能,我们可以在PHP中使用execshell_exec函数。

使用PHP运行任何命令的示例命令是:

PHP
 /dev/null 2>&1 &', "echo 4"));
?>


PHP
 %s 2>&1 & echo $!',
        $command,
        $outputFile
    ));
       
      print_r("processID of process in background is: "
        . $processId);
}
  
// "sleep 5" process will run in background
run("sleep 5");
  
print_r("current processID is: ".getmypid());
  
?>


上面的代码有几个重点:

  • 脚本的输出 (STDOUT) 必须定向到文件。 /dev/null 表示我们没有记录输出。
  • 错误 (STDERR) 也必须指向一个文件。 2>&1 表示 STDERR 被重定向到 STDOUT 并因此进入必杀技。
  • 最后的 & 告诉命令在后台执行

我们可以使用命令 ps 检查任何正在运行的进程的状态,例如:

ps -ef

因此,要从PHP运行任何后台进程,我们可以简单地使用 exec 或 shell_exec函数来执行任何终端命令,在该命令中,我们可以简单地在最后添加 & ,以便该进程可以在后台运行。

下面是上述方法的实现:

PHP

 %s 2>&1 & echo $!',
        $command,
        $outputFile
    ));
       
      print_r("processID of process in background is: "
        . $processId);
}
  
// "sleep 5" process will run in background
run("sleep 5");
  
print_r("current processID is: ".getmypid());
  
?>
输出
processID of process in background is: 19926
current processID is: 19924