/** * 文件更改监控 * @param resource $inotify_fd * @param int $flag * @return boolean */ public static function dealFileModify($inotify_fd, $flag) { // 获取更新的文件 $files_to_reload = Inotify::getModifiedFiles(); // 获得文件与worker的映射关系 $file_worker_name_map = self::getFilesWorkerNameMap(); // 遍历要重新载入的文件 $need_reload = false; foreach ($files_to_reload as $file) { if (!isset($file_worker_name_map[$file])) { self::notice('$file_worker_name_map[$file] not exist file:' . $file); continue; } // 遍历文件 foreach ($file_worker_name_map[$file] as $worker_name) { if (!isset(self::$workerPids[$worker_name])) { self::notice("\\self::{$workerPids[$worker_name]} empty"); return false; } self::notice(" file {$file} updated"); // 获得每个worker的pid,放入重启队列workerToRestart self::addToRestartWorkers(self::$workerPids[$worker_name]); $need_reload = true; } } // 需要重启 if ($need_reload) { // 标记server在进程重启状态 self::restartWorkers(); Telnet::sendToAllClient("File Updated And Restart Workers "); } }