本文整理汇总了PHP中Worker::_pidsToRestart方法的典型用法代码示例。如果您正苦于以下问题:PHP Worker::_pidsToRestart方法的具体用法?PHP Worker::_pidsToRestart怎么用?PHP Worker::_pidsToRestart使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Worker
的用法示例。
在下文中一共展示了Worker::_pidsToRestart方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: reload
/**
* 执行平滑重启流程
* @return void
*/
protected static function reload()
{
// 主进程部分
if (self::$_masterPid === posix_getpid()) {
// 设置为平滑重启状态
if (self::$_status !== self::STATUS_RELOADING && self::$_status !== self::STATUS_SHUTDOWN) {
self::log("Workerman[" . basename(self::$_startFile) . "] reloading");
self::$_status = self::STATUS_RELOADING;
}
// 如果有worker设置了reloadable=false,则过滤掉
$reloadable_pid_array = array();
foreach (self::$_pidMap as $worker_id => $worker_pid_array) {
$worker = self::$_workers[$worker_id];
if ($worker->reloadable) {
foreach ($worker_pid_array as $pid) {
$reloadable_pid_array[$pid] = $pid;
}
} else {
foreach ($worker_pid_array as $pid) {
// 给reloadable=false的进程也发送一个reload信号,触发onWorkerReload
posix_kill($pid, SIGUSR1);
}
}
}
// 得到所有可以重启的进程
self::$_pidsToRestart = array_intersect(self::$_pidsToRestart, $reloadable_pid_array);
// 平滑重启完毕
if (empty(self::$_pidsToRestart)) {
if (self::$_status !== self::STATUS_SHUTDOWN) {
self::$_status = self::STATUS_RUNNING;
}
return;
}
// 继续执行平滑重启流程
$one_worker_pid = current(self::$_pidsToRestart);
// 给子进程发送平滑重启信号
posix_kill($one_worker_pid, SIGUSR1);
// 定时器,如果子进程在KILL_WORKER_TIMER_TIME秒后没有退出,则强行杀死
Timer::add(self::KILL_WORKER_TIMER_TIME, 'posix_kill', array($one_worker_pid, SIGKILL), false);
} else {
// 如果当前worker的reloadable属性为真,则执行退出
$worker = current(self::$_workers);
// 如果有设置Reload回调,则执行
if ($worker->onWorkerReload) {
call_user_func($worker->onWorkerReload, $worker);
}
if ($worker->reloadable) {
self::stopAll();
}
}
}