Search code examples
signalsforkzombie-processphp-7pcntl

PHP7 Bugs pcntl_signal(SIGCHLD, SIG_IGN); how to kill zombies?


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?


Solution

  • $p = pcntl_waitpid(-1,$status,WNOHANG); 
    

    Without handler. In parent after create.