If i run it:
<?php
declare(ticks = 1);
for($i=0;$i<300;$i++){
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
usleep(2500);
} else {
echo 'Child'.$i."\r\n";
sleep(mt_rand(1,3));
exit;
}
}
echo 'Test123';
pcntl_signal(SIGCHLD, SIG_IGN);
sleep(60)
echo 'Test456';
?>
on PHP5. I see multiple Child
and Test123
, after 60 sec, I see Test456
.
But! On PHP7, I see multiple Child
Test123
and not Test456
- sleep doesn't work.
In production php-daemon I see pcntl_signal(SIGCHLD, SIG_IGN);
don't help to kill zombie anymore! It doesn't work.
What I can do?
$p = pcntl_waitpid(-1,$status,WNOHANG);
Without handler. In parent after create.