Intereting Posts
PHPExcel устанавливает границу и формат для всех листов в электронной таблице. Показывать что-то в определенное время каждую неделю с помощью PHP Oauth2 – как связать access_token с фактическим пользователем Разделить входную строку в PHP на несколько частей без разрыва слов PHP MySQLi INSERT не работает, никаких ошибок Отображать изображения по очереди со следующей и предыдущей функциональностью не удалось повторно задать определенный шаблон Переменные продукты WooCommerce: сохраняйте только «минимальную» цену с помощью специальной метки PHP включает файловую стратегию разрушить сеанс на закрытии окна? Создание вложенного списка из многомерного массива Интеграция доктрины с приложением Zend Framework 1.8 Python3: JSON POST Request БЕЗ запросов библиотеки В PHP, как получить время / дату, когда cookie был установлен / создан? Исключить строку для использования в почте ()

pcntl_wait не прерывается SIGTERM

Согласно документам PHP для pcntl_wait ,

Функция wait приостанавливает выполнение текущего процесса до тех пор, пока ребенок не выйдет, или пока не поступит сигнал, действие которого заключается в прекращении текущего процесса или вызове функции обработки сигнала.

Тем не менее, когда я запускаю следующий код и отправляю SIGTERM в родительский процесс с kill -s SIGTERM [pid] обработчик сигнала вызывается только после выхода из него (т. pcntl_wait() Мне нужно дождаться завершения сна). Не следует 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); } ?> 

Выход (SIGTERM появляется только после ожидания 30 секунд):

 $ php fork_test.php child parent SIGTERM 

Версия PHP => 5.3.3