函数名:pcntl_signal()
适用版本:PHP 4 >= 4.1.0, PHP 5, PHP 7
函数描述:pcntl_signal()函数用于设置信号处理函数,当接收到指定的信号时,会调用相应的处理函数。
用法:
bool pcntl_signal ( int $signo , callable|int $handler [, bool $restart_syscalls = TRUE ] )
参数:
- $signo:指定的信号编号,可以是预定义的常量如SIGINT,也可以是整数。
- $handler:指定的信号处理函数,可以是一个可调用的函数名或闭包,也可以是一个整数。若为整数,表示采用默认的信号处理函数。
- $restart_syscalls(可选):指定是否在信号处理函数结束后重新启动系统调用,默认为TRUE。
返回值:成功时返回TRUE,失败时返回FALSE。
示例:
// 定义信号处理函数
function signalHandler($signo) {
switch ($signo) {
case SIGINT:
echo "接收到 SIGINT 信号\n";
// 执行相应的操作
break;
case SIGTERM:
echo "接收到 SIGTERM 信号\n";
// 执行相应的操作
break;
// 其他信号处理
}
}
// 设置信号处理函数
pcntl_signal(SIGINT, 'signalHandler');
pcntl_signal(SIGTERM, 'signalHandler');
// 模拟进程运行
while (true) {
// 执行任务
// ...
// 检查是否收到信号,如果收到则调用信号处理函数
pcntl_signal_dispatch();
// 其他操作
// ...
}
在上面的示例中,我们定义了一个signalHandler()函数作为信号处理函数,它会根据接收到的信号类型执行相应的操作。然后使用pcntl_signal()函数来设置SIGINT和SIGTERM信号的处理函数为signalHandler()。在进程运行过程中,通过调用pcntl_signal_dispatch()函数来检查是否收到信号,并触发对应的信号处理函数。