如何最好地告诉后台php程序停止


How best to tell a background PHPprogram to stop

我写了一个长时间运行的PHP后台程序。有时候我想让它停下来,但要优雅地停下来,

我所做的是,在主逻辑循环中,我测试具有特定名称的文件是否存在。如果该文件存在,则程序停止。当我想让程序自己结束时,我只需要创建那个文件。

有更优雅的方法吗

我不想扼杀这个进程。我想让程序自己结束

正如在注释中已经建议的那样,您可以使用信号来终止您的进程。您想要使用的信号是SIGTERM信号(强调我的)[ref]:

SIGTERM信号被发送给进程以请求其终止。与SIGKILL信号不同,它可以被捕获并解释,也可以被进程忽略。这允许进程执行很好的终止,如果合适的话释放资源和保存状态。SIGINT与SIGTERM几乎相同。

在启动主循环之前,使用pcntl_signal函数注册一个信号处理程序。

declare(ticks = 1);
$stopProcess = FALSE;
pcntl_signal(SIGTERM, function() use (&$stopProcess) {
    echo "Received SIGTERM...'n";
    // Do further cleanup work either here or after the end of your main loop
    $stopProcess = TRUE;
});
while (!$stopProcess) {
    // main work loop
}
// Do cleanup work either here or in your signal handler

在命令行中,您可以使用kill可执行文件向您的进程发送SIGTERM信号:

$ kill -TERM <process id>