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

时间:2013-08-24 20:23:48

标签: php unix command-line signals term

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

我想拦截那个TERM Signal并优雅地终止PHP进程。可以这样做吗?

我已将此代码添加到我的PHP程序中以尝试执行此操作:

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

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

1 个答案:

答案 0 :(得分:-1)

我不擅长php,但gracefully_terminate函数不应该有一个参数吗?像:

function gracefully_terminate($signo)

要从CLI终止进程,您应该使用

kill -s SIGTERM #####

killall processname
相关问题