/** * 创建一个子进程 * @param Worker $worker * @throws Exception */ protected static function forkOneWorker($worker) { $pid = pcntl_fork(); // 主进程记录子进程pid if ($pid > 0) { self::$_pidMap[$worker->workerId][$pid] = $pid; } elseif (0 === $pid) { // 启动过程中尝试重定向标准输出 if (self::$_status === self::STATUS_STARTING) { self::resetStd(); } self::$_pidMap = array(); self::$_workers = array($worker->workerId => $worker); Timer::delAll(); self::setProcessTitle('WorkerMan: worker process ' . $worker->name . ' ' . $worker->getSocketName()); self::setProcessUser($worker->user); $worker->run(); exit(250); } else { throw new Exception("forkOneWorker fail"); } }
/** * Fork one worker process. * @param Worker $worker * @throws Exception */ protected static function forkOneWorker($worker) { $pid = pcntl_fork(); // Get available worker id. $id = self::getId($worker->workerId, 0); // For master process. if ($pid > 0) { self::$_pidMap[$worker->workerId][$pid] = $pid; self::$_idMap[$worker->workerId][$id] = $pid; } elseif (0 === $pid) { if ($worker->reusePort) { $worker->listen(); } if (self::$_status === self::STATUS_STARTING) { self::resetStd(); } self::$_pidMap = array(); self::$_workers = array($worker->workerId => $worker); Timer::delAll(); self::setProcessTitle('WorkerMan: worker process ' . $worker->name . ' ' . $worker->getSocketName()); $worker->setUserAndGroup(); $worker->id = $id; $worker->run(); exit(250); } else { throw new Exception("forkOneWorker fail"); } }
/** * 创建一个子进程 * @param Worker $worker * @throws Exception */ protected static function forkOneWorker($worker) { $pid = pcntl_fork(); // 获得可用的id $id = self::getId($worker->workerId, 0); // 主进程记录子进程pid if ($pid > 0) { self::$_pidMap[$worker->workerId][$pid] = $pid; self::$_idMap[$worker->workerId][$id] = $pid; } elseif (0 === $pid) { // 如果设置了端口复用,则在子进程执行监听 if ($worker->reusePort) { $worker->listen(); } // 启动过程中尝试重定向标准输出 if (self::$_status === self::STATUS_STARTING) { self::resetStd(); } self::$_pidMap = array(); self::$_workers = array($worker->workerId => $worker); Timer::delAll(); self::setProcessTitle('WorkerMan: worker process ' . $worker->name . ' ' . $worker->getSocketName()); $worker->setProcessUserAndRoot(); $worker->id = $id; $worker->run(); exit(250); } else { throw new Exception("forkOneWorker fail"); } }