在屏幕中循环时向bash发送信号

时间:2016-02-03 15:12:13

标签: bash signals

我有一个screen进程使用无限bash循环无限期地运行PHP脚本:

screen -S proc1 -d -m bash -c while [ true ] ; do /path/to/application.php ; done

我想优雅地停止bash循环,以便当前的PHP进程完成运行但不再启动进程。

如果我发送信号(使用killkillall),是否会被屏幕,bash循环或PHP脚本捕获?

1 个答案:

答案 0 :(得分:1)

Write a signal handler进入PHP脚本,以便在收到来自killkillall的信号时执行此操作。

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发送SIGTERMkill -9 12345发送SIGKILL