我有一个screen
进程使用无限bash循环无限期地运行PHP脚本:
screen -S proc1 -d -m bash -c while [ true ] ; do /path/to/application.php ; done
我想优雅地停止bash循环,以便当前的PHP进程完成运行但不再启动进程。
如果我发送信号(使用kill
或killall
),是否会被屏幕,bash循环或PHP脚本捕获?
答案 0 :(得分:1)
Write a signal handler进入PHP脚本,以便在收到来自kill
或killall
的信号时执行此操作。
function sig_handler($signo) {
switch ($signo) {
case SIGTERM:
// handle shutdown tasks
exit;
}
}
pcntl_signal(SIGTERM, "sig_handler");
将信号发送到php
PID肯定会完成这项工作。如果您发送到screen
PID,不确定它是如何工作的。可能screen
会很好地杀掉它的过程,但我不知道。
修改:显然你无法为SIGKILL
编写处理程序,因此坚持使用SIGTERM
(只需调用kill 12345
发送SIGTERM
,kill -9 12345
发送SIGKILL
)