0) { if(pcntl_wifexited($status)) { $ret = pcntl_wexitstatus($status); Log::record("child normal quit ret={$ret} status = {$status}",Log::DEBUG); } else { $ret = pcntl_wexitstatus($status); Log::record("child abnormal quit ret={$ret} status = {$status}",Log::DEBUG); } self::fork_listen($fd,$callback,1); } else { //子进程已经退出干净了. break; } } } static function join() { do { Log::record("waitting child quit......",Log::DEBUG); $ret = pcntl_wait($status); Log::record("pcntl_waitpid ret={$ret}",Log::DEBUG); if($ret > 0) { if(pcntl_wifexited($status)) { $ret = pcntl_wexitstatus($status); Log::record("child normal quit ret={$ret} status = {$status}",Log::DEBUG); } else { $ret = pcntl_wexitstatus($status); Log::record("child abnormal quit ret={$ret} status = {$status}",Log::DEBUG); } } else { //子进程已经退出干净了. break; } } while(true); } static function fork_worker($callback, $count) { $count = intval($count); if($count <= 0) { return call_user_func($callback); } else { while ($count--) { util::fork_child($callback,NULL); } } } static function fork_workerex($callback, $count) { self::fork_worker($callback,$count); while ($count) { Log::record("waitting child quit......",Log::DEBUG); $ret = pcntl_wait($status); Log::record("pcntl_waitpid ret={$ret}",Log::DEBUG); if($ret > 0) { if(pcntl_wifexited($status)) { $ret = pcntl_wexitstatus($status); Log::record("child normal quit ret={$ret} status = {$status}",Log::DEBUG); } else { $ret = pcntl_wexitstatus($status); Log::record("child abnormal quit ret={$ret} status = {$status}",Log::DEBUG); } self::fork_worker($callback,1); } else { //子进程已经退出干净了. break; } } } }