PHP如何模拟SIGPIPE?

时间:2019-05-28 09:44:08

标签: php sigpipe

我的环境: Ubuntu 18.04 LTS 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.

并且脚本应该停止。

1 个答案:

答案 0 :(得分:1)

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);
}

杀死-13990:

artemev@Vitaly-PC:~/project/example$ php signal_example.php 
Process 990 "php" received signal SIGPIPE, Broken pipe.