当前位置: 首页>>代码示例>>PHP>>正文


PHP Worker::_pidsToRestart方法代码示例

本文整理汇总了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();
         }
     }
 }
开发者ID:lisonglin0129,项目名称:LDFRAMEWORK,代码行数:55,代码来源:Worker.php


注:本文中的Worker::_pidsToRestart方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。