Nginx源碼學(xué)習(xí)——worker進(jìn)程的運(yùn)行與終止

循環(huán)總體流程

部分流程圖和表格參考于《深入理解Nginx》

worker進(jìn)程循環(huán)在ngx_worker_process_cycle函數(shù)中進(jìn)行等限,循環(huán)流程如圖所示遮婶。在Nginx源碼學(xué)習(xí)——優(yōu)雅的停止Nginx服務(wù)一文中描述過master進(jìn)程是如何通知子進(jìn)程終止的身腻。而通知到達(dá)的結(jié)果就是相應(yīng)全局變量值的改變:

信號(hào) 全局標(biāo)志位變量 意義
QUIT ngx_quit 優(yōu)雅的關(guān)閉進(jìn)程
TERM ngx_terminate 強(qiáng)制關(guān)閉進(jìn)程
USR1 ngx_reopen 重新打開所有文件
WINCH ngx_debug_quit 目前無實(shí)際意義

然后循環(huán)中,通過檢查全局變量的值來決定后續(xù)動(dòng)作。

Nginx——worker進(jìn)程的運(yùn)行與終止.png

worker進(jìn)程退出流程

ngx_worker_process_exit函數(shù)執(zhí)行子進(jìn)程worker退出前的收尾工作鸵贬,并最終使子進(jìn)程退出。該函數(shù)工作流程如下:

子進(jìn)程終止后脖捻,將發(fā)送SIGCHLD信號(hào)給 master進(jìn)程阔逼,捕捉信號(hào)后觸發(fā)信號(hào)處理函數(shù)ngx_signal_handler,進(jìn)而進(jìn)行對(duì)終止子進(jìn)程的善后處理:

  if (signo == SIGCHLD) {
        ngx_process_get_status();
    }

ngx_process_get_status函數(shù)負(fù)責(zé)善后處理地沮,流程如下:

worker進(jìn)程退出后的善后處理.png

Nginx服務(wù)器的是服務(wù)器編程的良好范例嗜浮。上述流程中,使用循環(huán)調(diào)用waitpid的方式獲取終止子進(jìn)程的狀態(tài)摩疑。

    for ( ;; ) {
        pid = waitpid(-1, &status, WNOHANG); //WNOHANG告知危融,在尚有未終止的子進(jìn)程運(yùn)行時(shí),不要阻塞雷袋。
        ......
     }

而不是使用會(huì)阻塞進(jìn)程的wait函數(shù)吉殃。具體wait與waitpid的對(duì)比,見UNP v3 5.10節(jié)

調(diào)用waitpid()出錯(cuò)返回-1后楷怒,檢查錯(cuò)誤信息蛋勺,如為EINTR,說明waitpid是被信號(hào)中斷進(jìn)而返回的鸠删。關(guān)于“中斷的系統(tǒng)調(diào)用”見APUE p260.

pid == 0 說明當(dāng)前沒有子進(jìn)程終止抱完。

當(dāng)發(fā)現(xiàn)子進(jìn)程終止?fàn)顟B(tài)信息WEIXTSTATUS(status) = 2 時(shí),說明子進(jìn)程是在初始化過程中出錯(cuò)退出的冶共。
檢查源代碼發(fā)現(xiàn):ngx_worker_process_init函數(shù)內(nèi)多處調(diào)用exit(2)使子進(jìn)程退出乾蛤。而如果子進(jìn)程在進(jìn)程信息表中的標(biāo)志位respawn 為1,說明要求子進(jìn)程終止后應(yīng)重新拉起捅僵,但因?yàn)樽舆M(jìn)程退出是初始化過程出錯(cuò)導(dǎo)致的家卖,是無法重新拉起的,因?yàn)閷espawn清為0庙楚。


釋放子進(jìn)程worker占用的資源

未完待續(xù)上荡。。。酪捡。


作者:時(shí)光沖刷下的足跡
鏈接:
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有叁征,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逛薇,一起剝皮案震驚了整個(gè)濱河市捺疼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌永罚,老刑警劉巖啤呼,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呢袱,居然都是意外死亡官扣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門羞福,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕蹄,“玉大人,你說我怎么就攤上這事治专÷袅辏” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵看靠,是天一觀的道長赶促。 經(jīng)常有香客問我液肌,道長挟炬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任嗦哆,我火速辦了婚禮谤祖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘老速。我一直安慰自己粥喜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布橘券。 她就那樣靜靜地躺著额湘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旁舰。 梳的紋絲不亂的頭發(fā)上锋华,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音箭窜,去河邊找鬼毯焕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛磺樱,可吹牛的內(nèi)容都是我干的纳猫。 我是一名探鬼主播婆咸,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼芜辕!你這毒婦竟也來了尚骄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤侵续,失蹤者是張志新(化名)和其女友劉穎乖仇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體询兴,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乃沙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诗舰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片警儒。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖眶根,靈堂內(nèi)的尸體忽然破棺而出蜀铲,到底是詐尸還是另有隱情,我是刑警寧澤属百,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布记劝,位于F島的核電站,受9級(jí)特大地震影響族扰,放射性物質(zhì)發(fā)生泄漏厌丑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一渔呵、第九天 我趴在偏房一處隱蔽的房頂上張望怒竿。 院中可真熱鬧,春花似錦扩氢、人聲如沸耕驰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朦肘。三九已至,卻和暖如春双饥,著一層夾襖步出監(jiān)牢的瞬間媒抠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工兢哭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留领舰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像冲秽,于是被迫代替她去往敵國和親舍咖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • The Zen of Python Beautiful is better than ugly.優(yōu)美勝于丑陋Exp...
    晟文刀閱讀 5,021評(píng)論 0 1
  • #行進(jìn)在路上#大部分業(yè)內(nèi)人士在自己的人生生涯中锉桑,均是盡可能的去保護(hù)所在的領(lǐng)域排霉,盡量的尊重他人成果。在Apple停止...
    城落滿芯閱讀 224評(píng)論 0 0
  • 看一二三個(gè)月 數(shù)四五六只鴨 本是高臺(tái)浪子 偏似閨閣中人 長嘆心事杯中看 怎知念想月中無 何時(shí)驚醒難再夢(mèng) 細(xì)數(shù)滴漏到天明
    薄皮橙子閱讀 213評(píng)論 0 1
  • 我們現(xiàn)在開始寫日記了民轴。 我和我媽媽很高興攻柠。我們決定堅(jiān)持每天都寫日記。今天去上聲樂課結(jié)果老師沒在笑死我了哈哈后裸。...
    老虎和小妞閱讀 133評(píng)論 1 1