根据pcntl_wait的 PHP 文档,
等待函数暂停当前进程的执行,直到子进程退出,或者直到传递了一个信号,其动作是终止当前进程或调用信号处理函数。
但是,当我运行以下代码并使用kill -s SIGTERM [pid]信号处理程序将 SIGTERM 发送到父进程时,仅在子进程退出后才调用(即我必须等待睡眠完成。不pcntl_wait()应该被 SIGTERM 中断吗?
fork_test.php:
<?php
declare(ticks = 1);
function sig_handler($signo) {
switch ($signo) {
case SIGTERM:
echo 'SIGTERM' . PHP_EOL;
break;
default:
}
}
pcntl_signal(SIGTERM, 'sig_handler');
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
}
else if ($pid) {
echo 'parent' . PHP_EOL;
pcntl_wait($status);
}
else {
echo 'child' . PHP_EOL;
sleep(30);
}
?>
Run Code Online (Sandbox Code Playgroud)
输出(SIGTERM 仅在等待 30 秒后出现):
$ php fork_test.php
child
parent
SIGTERM
Run Code Online (Sandbox Code Playgroud)
PHP 版本 => 5.3.3
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |