php多进程,父进程捕获SIGCHLD信号, 重新fork子进程, 新fork的子进程无法kill , 只能 kill -9 。求大神看看代码

目标: 父进程作为守护进程,监控子进程(worker), 子进程挂掉,父进程立刻fork一个新的子进程。

问题:首次启动父进程的时候,伴随一个子进程。kill 子进程,父进程捕获SIGCHLD 信号,重新fork,看起来没啥问题。再kill 刚刚fork的子进程,没作用,求解

<?php

$workerIDs = [];


$pid =  pcntl_fork();

if ($pid == -1) {
    exit('fork failed');
}elseif ($pid == 0) {
    pcntl_signal(SIGTERM, 'close');
    echo "child\n";
    handle();
}else{
    echo "parent\n";
    pcntl_signal(SIGCHLD, 'refork');
    pcntl_signal(SIGTERM, 'closeAll');
    $workerIDs[] = $pid;

    while(1) {
        pcntl_signal_dispatch();
        sleep(1);
    }
}




// worker 中的逻辑方法
function handle()
{
    while(1) {
        pcntl_signal_dispatch();
        echo "child step1".PHP_EOL;
        sleep(2);
        echo "child step2".PHP_EOL;
        sleep(2);
        echo "child step3".PHP_EOL;
        sleep(2);
    }
}

// worker进程 SIGTERM信号 执行方法
function close()
{
    $pid  = posix_getpid();
    echo "child($pid) close \n";
    exit(0);
}


// 父进程 SIGCHID 信号执行方法
function refork()
{
    global $workerIDs;

    echo "parent refork\n";

    $res = pcntl_wait($status);

    echo "res:$res\n";

    if ($res > 0  && isset($workerIDs[$res])) {
        unset($workerIDs[$res]);
    }

    $pid =  pcntl_fork();

    if ($pid == -1) {
        exit('fork failed');
    }elseif ($pid == 0) {
        pcntl_signal(SIGTERM, 'close');
        handle();
    }else{
        /*pcntl_signal(SIGCHLD, 'refork');
        pcntl_signal(SIGTERM, 'closeAll');*/
        $workerIDs[] = $pid;
    }
    echo "new child $pid \n";
}


// 父进程  SIGTERM信号 执行方法
function closeAll()
{
    global $workerIDs;

    foreach ($workerIDs as $v) {
        posix_kill($v, SIGTERM);
        pcntl_waitpid($v,$status);
    }
    echo "close all".PHP_EOL;
    exit(0);
}



请问解决了吗,也遇到这个问题了