如果我运行它:
<?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';
?>
在PHP5上。我看到多个Child
和Test123
,60秒后,我看到Test456
。
但是!在PHP7上,我看到多个Child
Test123
而不是Test456
- 睡眠不起作用。
在生产php-daemon中,我看到pcntl_signal(SIGCHLD, SIG_IGN);
不再帮助杀死僵尸了!它不起作用。
我能做什么?
答案 0 :(得分:1)
$p = pcntl_waitpid(-1,$status,WNOHANG);
没有处理程序。在创建后的父级。
答案 1 :(得分:0)
好的:)我找到答案:)
declare(ticks = 1);
- 在剧本
上排名第一该功能对全球:
function signal_handler($signal) {
switch($signal) {
case SIGCHLD:
while (pcntl_waitpid(0, $status) != -1) {
$status = pcntl_wexitstatus($status);
echo "Child $status completed\n";
}
exit;
}
}
这在父母的叉子之后
pcntl_signal(SIGCHLD, "signal_handler");