/** Перехватываем системные сигналы **/
declare(ticks=1);
if(function_exists('pcntl_signal_dispatch')) //PHP 5.3
register_tick_function('pcntl_signal_dispatch');
// Ждем сообщения от потомков о завершении работы
pcntl_signal(SIGCHLD, "childSignalHandler");
function childSignalHandler($signo, $pid = null, $status = null) {
global $forkCount;
switch($signo) {
case SIGCHLD:
// При получении сигнала от дочернего процесса
if (!$pid) {
$pid = pcntl_waitpid(-1, $status, WNOHANG);
}
// Пока есть завершенные дочерние процессы
while ($pid > 0) {
$forkCount--;
$pid = pcntl_waitpid(-1, $status, WNOHANG);
}
break;
default:
// все остальные сигналы
}
}