當前位置: 首頁>>代碼示例>>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;未經允許,請勿轉載。