我写了一个长时间运行的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>