关于reloadable属性配置的设计意义

liruizhe1

按照文档说明reloadable设置为false,那么这个进程是不会被重启的,但是源码中,还是对这些进程进行重启信号,代码如下:

                // Send reload signal to all child processes.
                $reloadable_pid_array = array();
                foreach (static::$_pidMap as $worker_id => $worker_pid_array) {
                    $worker = static::$_workers[$worker_id];
                    if ($worker->reloadable) {
                        foreach ($worker_pid_array as $pid) {
                            $reloadable_pid_array[$pid] = $pid;
                        }
                    } else {
                        foreach ($worker_pid_array as $pid) {
                            // Send reload signal to a worker process which reloadable is false.
                            \posix_kill($pid, $sig);
                        }
                    }
                }

所以对reloadable设置为false的进程发送信号的意义是?

344 1 0
1个回答

小W

应该是关于master进程和child进程的设置吧,是不是只针对child进程?

  • 小W 2023-08-16

    https://www.workerman.net/doc/workerman/worker/on-worker-reload.html
    注意:

    子进程收到reload信号默认的动作是退出重启,以便新进程重新加载业务代码完成代码更新。所以reload后子进程在执行完onWorkerReload回调后便立刻退出是正常现象。

    如果在收到reload信号后只想让子进程执行onWorkerReload,不想退出,可以在初始化Worker实例时设置对应的Worker实例的reloadable属性为false。

  • liruizhe1 2023-08-16

    所以这设计是为了让子进程收到重启信号执行事件,但是最后不退出。

  • walkor 2023-08-16

🔝