PHP如何模拟SIGPIPE?
PHP how to simulate SIGPIPE?
我的环境:
Ubuntu 18.04 长期支持
PHP 7.2.2 ZTS 无调试
我有一个大型应用程序,有时会发生 Broken pipe
错误。
我想处理它,但为此我需要模拟这个错误进行开发。我怎样才能做到这一点 ?
我试过:
posix_kill(posix_getpid(), SIGPIPE);
while(1) {
sleep(5);
}
还有:
sudo kill -13 pid
但是脚本继续工作。
预期结果:
Thread 1 "php" received signal SIGPIPE, Broken pipe.
脚本应该停止。
signal_example.php:
pcntl_async_signals(true);
pcntl_signal(SIGPIPE, function (int $signo) {
echo 'Process ' . posix_getpid() . ' "php" received signal SIGPIPE, Broken pipe.';
exit;
});
while (1) {
sleep(1);
}
kill -13 990:
artemev@Vitaly-PC:~/project/example$ php signal_example.php
Process 990 "php" received signal SIGPIPE, Broken pipe.
我的环境: Ubuntu 18.04 长期支持 PHP 7.2.2 ZTS 无调试
我有一个大型应用程序,有时会发生 Broken pipe
错误。
我想处理它,但为此我需要模拟这个错误进行开发。我怎样才能做到这一点 ?
我试过:
posix_kill(posix_getpid(), SIGPIPE);
while(1) {
sleep(5);
}
还有:
sudo kill -13 pid
但是脚本继续工作。
预期结果:
Thread 1 "php" received signal SIGPIPE, Broken pipe.
脚本应该停止。
signal_example.php:
pcntl_async_signals(true);
pcntl_signal(SIGPIPE, function (int $signo) {
echo 'Process ' . posix_getpid() . ' "php" received signal SIGPIPE, Broken pipe.';
exit;
});
while (1) {
sleep(1);
}
kill -13 990:
artemev@Vitaly-PC:~/project/example$ php signal_example.php
Process 990 "php" received signal SIGPIPE, Broken pipe.