【发布时间】:2023-03-11 08:39:01
【问题描述】:
我们正在运行一个 PHP 守护程序,它查看队列,接收工作人员作业并生成工作人员来处理它。工人自己在继续之前获得对特定位置的锁定。
我们将守护进程生成为 nohup 后台进程。
整个架构似乎都可以工作,除非我们必须终止进程,无论出于何种原因。如果我们使用 -9 杀死它们,则无法将其捕获在工作进程中并在死前释放锁。
如果我们使用小于 -9 的任何内容(如 TERM 或 HUP),守护进程或工作进程似乎都不会收到它。
有人用更好的方法解决了这个问题吗?
(ps:顺便说一句,由于其他考虑,我们可能无法更改我们的实现语言,所以请只考虑基于PHP的解决方案)
【问题讨论】:
-
是PHP5.3(或以上)吗?如果是,您是否在守护程序代码之上使用了
pcntl_signal_dispatch();或以其他方式声明了ticks?主守护进程是否阻塞等待子进程?孩子们有没有阻塞 IO? -
SIGKILL 有点野蛮;当您在前台运行 SIGTERM 时它会起作用吗?
-
声明滴答似乎已经成功了。不幸的是 pcntl_signal 的文档并没有以更引人注目的方式提及它。声明后,它已开始按预期工作。
-
@hek2mgl 随意输入答案,我会接受,或者我会等到明天自己输入答案..
-
@Shreeni 好的,会回答的! :)
标签: php kill-process daemons