PHP как симулировать SIGPIPE? - PullRequest
2 голосов
/ 28 мая 2019

Моя среда: 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 Ответ

2 голосов
/ 28 мая 2019

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

убить -13 990:

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