setDescription('停止运行的框架'); $this->setDefinition([ new InputOption('force', 'f', InputOption::VALUE_NONE, '强制停止'), ]); } protected function execute(InputInterface $input, OutputInterface $output): int { if ($input->getOption('force') !== false) { $file_path = _zm_pid_dir(); $list = DataProvider::scanDirFiles($file_path, false, true); foreach ($list as $file) { $name = explode('.', $file); if (end($name) == 'pid') { $pid = file_get_contents($file_path . '/' . $file); Process::kill($pid, SIGKILL); } elseif ($file === 'master.json') { $json = json_decode(file_get_contents($file_path . '/' . $file), true); Process::kill($json['pid'], SIGKILL); } unlink($file_path . '/' . $file); } } else { parent::execute($input, $output); } Process::kill(intval($this->daemon_file['pid']), SIGTERM); $i = 10; while (Framework::getProcessState(ZM_PROCESS_MASTER) !== false && $i > 0) { sleep(1); --$i; } if ($i === 0) { $output->writeln('停止失败,请检查进程pid #' . $this->daemon_file['pid'] . ' 是否响应!'); $output->writeln('或者可以尝试使用参数 --force 来强行杀死所有进程'); } else { $output->writeln('成功停止!'); } return 0; } }