Согласно документам 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