/** * 设置server信号处理函数 * @param null $null * @param int $signal * @return void */ public static function signalHandler($signal) { switch ($signal) { // 停止服务信号 case SIGINT: self::notice("Workerman is shutting down"); self::stop(); break; // 测试用 // 测试用 case SIGUSR1: break; // worker退出信号 // worker退出信号 case SIGCHLD: // 这里什么也不做 // self::checkWorkerExit(); break; // 平滑重启server信号 // 平滑重启server信号 case SIGHUP: Lib\Config::reload(); self::notice("Workerman reloading"); $pid_worker_name_map = self::getPidWorkerNameMap(); $pids_to_restart = array(); foreach ($pid_worker_name_map as $pid => $worker_name) { // 如果对应进程配置了不热启动则不重启对应进程 if (Lib\Config::get($worker_name . '.no_reload')) { // 发送reload信号,以便触发onReload方法 posix_kill($pid, SIGHUP); continue; } $pids_to_restart[] = $pid; } self::addToRestartPids($pids_to_restart); self::restartPids(); break; } }
/** * 设置server信号处理函数 * @param null $null * @param int $signal * @return void */ public static function signalHandler($signal) { switch ($signal) { // 停止server信号 case SIGINT: self::notice("Server is shutting down"); self::stop(); break; // 测试用 // 测试用 case SIGUSR1: break; // worker退出信号 // worker退出信号 case SIGCHLD: // 不要在这里fork,fork出来的子进程无法收到信号 // self::checkWorkerExit(); break; // 平滑重启server信号 // 平滑重启server信号 case SIGHUP: Lib\Config::reload(); self::notice("Server reloading"); self::addToRestartWorkers(array_keys(self::getPidWorkerNameMap())); self::restartWorkers(); break; } }