本文整理匯總了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();
}
}
}