国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

Workerman 中 Worker::stopAll(); Master進程中為什么要增加一個Timer::add() 去清理殘留pid數(shù)據(jù)?

meows
Timer::add(1, "\\Workerman\\Worker::checkIfChildRunning");

/**
* check if child processes is really running
*/
public static function checkIfChildRunning()
{
    foreach (static::$_pidMap as $worker_id => $worker_pid_array) {
    foreach ($worker_pid_array as $pid => $worker_pid) {
        if (!\posix_kill($pid, 0)) {
        unset(static::$_pidMap[$worker_id][$pid]);
        }
    }
  }
}

 $pid = \pcntl_wait($status, \WUNTRACED);
 // Calls x handlers for pending signals again.
 \pcntl_signal_dispatch();
  if($pid > 0)
  {
    // ....
        // Clear process data.
        unset(static::$_pidMap[$worker_id][$pid]);
    // ....
  }

主進程,檢查子進程是否全部退出,然后清理子進程殘留數(shù)據(jù)。這里通過添加定時器去檢測是否運行,子進程退出后,主進程的pcntl_wait 不是會收到退出pid 然后進行清理。
那么為什么還要額外添加定時器去清理呢?這個定時器在主進程退出的時候也沒有進行Timer::del($timer_id) 呢???

1908 1 0
1個回答

six

Linux下信號可能會丟失的,而pcntl_wait 是等待SIGCHLD信號,所以pcntl_wait 可能會

  • meows 2021-11-06

    清理殘留PID定時器,為何在退出主進程的時候,沒有刪除掉呢?

  • six 2021-11-06

    不知道了。進程退出了什么都銷毀了,定時器也就沒了吧

年代過于久遠,無法發(fā)表回答
??