Process::signal
设置异步信号监听。
bool Process::signal(int $signo, callable $callback);
- 此方法基于
signalfd
和eventloop
是异步IO,不能用于同步程序中 - 同步阻塞的程序可以使用
pcntl
扩展提供的pcntl_signal
$callback
如果为null
,表示移除信号监听- 如果已设置了此信号的回调函数,重新设置时会覆盖历史设置
在
Server
中不能设置某些信号监听,如SIGTERM
和SIGALAM
使用实例
Process::signal(SIGTERM, function($signo) {
echo "shutdown.";
});
进程退出
在4.4
版本中不再将信号监听作为EventLoop
退出的block
条件。因此在程序中如果只有信号监听的事件,进程会直接退出。
Process::signal(SIGTERM, function($signo) {
echo "shutdown.";
});
Swoole\Event::wait();
上述程序不会进入EventLoop
,Swoole\Event::wait()
将立即返回,并退出进程。