Easyswoole源码分析-6-reload

作者: 会长__ | 来源:发表于2019-05-30 15:06 被阅读9次

    1.知识点

    1.主要看里面的SIGUSR1和SIGUSR2信号的作用
    2.向指定pid进程发送信号

    2.代码分析

    public function exec(array $args): ?string
        {
            // TODO: Implement exec() method.
            $all = false;
            //---------------------------------1.判断是重启task_worker还是平稳地restart所有Worker进程------------------------------
            if(in_array('all',$args)){
                $all = true;
            }
            //---------------------------------2.这里不知道要干啥------------------------------
            if(in_array('produce',$args)){
                Core::getInstance()->setIsDev(false);
            }
            $Conf = Config::getInstance();
            $res = '';
            //---------------------------------3.获取pidfile------------------------------
            $pidFile = $Conf->getConf("MAIN_SERVER.SETTING.pid_file");
            if (file_exists($pidFile)) {
                //---------------------------------4.判断是重启task_worker还是平稳地restart所有Worker进程------------------------------
                if (!$all) {
                    $sig = SIGUSR2;
                    $res = $res.Utility::displayItem('reloadType',"only-task")."\n";
                } else {
                    $sig = SIGUSR1;
                    $res = $res.Utility::displayItem('reloadType',"all-worker")."\n";
                }
                //---------------------------------5.清理cli面板------------------------------
                Utility::opCacheClear();
                $pid = file_get_contents($pidFile);
                //---------------------------------6.判断是否有此进程------------------------------
                if (!\swoole_process::kill($pid, 0)) {
                    return "pid :{$pid} not exist ";
                }
                //---------------------------------7.这个方法可以向进程发送信号,不要看到kill理解成杀死------------------------------
                \swoole_process::kill($pid, $sig);
                return $res. "send server reload command at " . date("Y-m-d H:i:s");
            } else {
                return "PID file does not exist, please check whether to run in the daemon mode!";
            }
        }
    

    相关文章

      网友评论

        本文标题:Easyswoole源码分析-6-reload

        本文链接:https://www.haomeiwen.com/subject/stkvtctx.html