static function start($startFunction)
{
if (empty(self::$pidFile)) {
throw new \Exception("require pidFile.");
}
$pid_file = self::$pidFile;
if (is_file($pid_file)) {
$server_pid = file_get_contents($pid_file);
} else {
$server_pid = 0;
}
if (!self::$optionKit) {
Swoole\Loader::addNameSpace('GetOptionKit', LIBPATH . '/module/GetOptionKit/src/GetOptionKit');
self::$optionKit = new \GetOptionKit\GetOptionKit();
}
$kit = self::$optionKit;
foreach (self::$defaultOptions as $k => $v) {
//解决Windows平台乱码问题
if (PHP_OS == 'WINNT') {
$v = iconv('utf-8', 'gbk', $v);
}
$kit->add($k, $v);
}
global $argv;
$opt = $kit->parse($argv);
if (empty($argv[1]) or isset($opt['help'])) {
goto usage;
} elseif ($argv[1] == 'reload') {
if (empty($server_pid)) {
exit("Server is not running");
}
if (self::$beforeReloadCallback) {
call_user_func(self::$beforeReloadCallback, $opt);
}
\Swoole::$php->os->kill($server_pid, SIGUSR1);
exit;
} elseif ($argv[1] == 'stop') {
if (empty($server_pid)) {
exit("Server is not running\n");
}
if (self::$beforeStopCallback) {
call_user_func(self::$beforeStopCallback, $opt);
}
\Swoole::$php->os->kill($server_pid, SIGTERM);
exit;
} elseif ($argv[1] == 'start') {
//已存在ServerPID,并且进程存在
if (!empty($server_pid) and \Swoole::$php->os->kill($server_pid, 0)) {
exit("Server is already running.\n");
}
} else {
usage:
$kit->specs->printOptions("php {$argv[0]} start|stop|reload");
exit;
}
self::$options = $opt;
$startFunction($opt);
}