如何捕获UNIX TERM信号,以便优雅地终止PHP进程


How do I catch a UNIX TERM Signal so I can gracefully terminate a PHP process?

我通过Supervisord运行了许多PHP进程。有时我需要关闭Supervisord。当我这样做时,我让它向它派生的所有PHP进程发送一个TERM信号(使用supervisord.conf中的stopsignal=TERM)。

我想截取TERM信号,然后优雅地终止PHP进程。这能做到吗?

我已经将这段代码添加到我的PHP程序中,试图做到这一点:

declare( ticks = 1 );
function gracefully_terminate() {
    echo "'n'ngracefully terminating'n'n";
}
pcntl_signal( SIGTERM, "gracefully_terminate" );

此外。。。为了便于测试,如何通过CLI向PHP进程发送TERM信号?我尝试过使用Kill -s TERM #####(#####是PHP进程的PID)。也许这是在发送TERM信号,但它并没有终止PHP进程。

我不太擅长php,但gracefully_terminate函数不应该只有一个参数吗?类似:

function gracefully_terminate($signo)

要从CLI终止进程,应使用

kill -s SIGTERM #####

killall processname