#!/usr/bin/env php addEventListener(WorkerStartEvent::getName(), function () { register_shutdown_function(function () { $error = error_get_last(); // 下面这段代码的作用就是,不是错误引发的退出时照常退出即可 if (($error['type'] ?? 0) != 0) { logger()->emergency(zm_internal_errcode('E00027') . 'Internal fatal error: ' . $error['message'] . ' at ' . $error['file'] . "({$error['line']})"); } Framework::getInstance()->stop(); }); $_SERVER['argv'][] = '--printer'; $_SERVER['argv'][] = ZMResultPrinter::class; try { // 不退出,而是返回 code $retcode = Command::main(false); } finally { global $_swoole_atomic; $_swoole_atomic->set($retcode ?? 0); Framework::getInstance()->stop($retcode ?? 0); } }, 1); try { $options = ServerStartCommand::exportOptionArray(); $options['driver'] = 'workerman'; $options['worker-num'] = 1; $options['private-mode'] = true; (new Framework($options))->init()->start(); exit($_swoole_atomic->get()); } catch (Throwable $e) { echo $e->getMessage() . PHP_EOL; exit(1); }