函数名:Swoole\Process::signal()
适用版本:Swoole扩展版本1.9.0以上
用法:Swoole\Process::signal()函数用于设置进程信号处理函数。
语法:bool Swoole\Process::signal(int $signo, callable $callback)
参数:
- $signo:要处理的信号编号,可以使用PHP内置的PCNTL扩展提供的常量,如SIGTERM、SIGUSR1等。
- $callback:信号处理函数,可以是一个普通函数、匿名函数或者类方法。
返回值:成功返回true,失败返回false。
示例:
<?php
// 创建子进程
$process = new Swoole\Process(function() {
// 子进程信号处理函数
Swoole\Process::signal(SIGTERM, function($signo) {
echo "子进程收到信号SIGTERM,退出进程\n";
exit;
});
});
// 启动子进程
$pid = $process->start();
// 主进程信号处理函数
Swoole\Process::signal(SIGTERM, function($signo) use ($pid) {
echo "主进程收到信号SIGTERM,向子进程发送信号\n";
Swoole\Process::kill($pid, SIGTERM);
});
// 等待子进程退出
Swoole\Process::wait();
echo "主进程退出\n";
以上示例中,首先创建了一个子进程,并在子进程中设置了SIGTERM信号的处理函数。然后在主进程中也设置了SIGTERM信号的处理函数,当主进程收到SIGTERM信号时,会向子进程发送SIGTERM信号。
当运行以上代码时,可以通过向该进程发送SIGTERM信号来触发信号处理函数的执行。示例中的输出结果会根据信号的触发而有所不同。