Nginx worker工作流程

worker工作流程圖

這裏寫圖片描述

worker接收的信號

  worker進程的工作方法:ngx_worker_process_cycle,它會關注4個全局標誌位。
1. sig_atomic_t ngx_terminate;
2. sig_atomic_t ngx_quit;
3. ngx_uint_t ngx_exiting;
4. sig_atomic_t ngx_reopen;

信號對框架的意義

信號 對應進程中的全局標誌變量 意義
QUIT ngx_quit 優雅地關閉進程
TERM或INT ngx_terminate 強制關閉進程
USR1 ngx_reopen 重新打開所有文件
WINCH ngx_debug_quit 目前沒有意義

worker工作過程(對應上圖)

  1. 檢查ngx_exiting標誌位。如果收到ngx_exiting=1的信號,則準備關閉worker進程。調用正在處理連接的關閉連接函,並檢查ngx_event_timer_rbtree紅黑樹,如果不爲空,說明還有事件需要處理,繼續執行;如果爲空,調用exit_process函數,最後銷燬內存池,退出worker進程。 如果ngx_exiting=0,調用ngx_process_events_and_timers函數處理事件。
  2. 接着檢查ngx_terminate標誌位。如果爲1,準備退出worker進程,這裏不是“優雅”地退出,而是立即調用exit_process函數,銷燬內存池。如果爲0,則繼續向下檢查其餘標誌位。
  3. 然後檢查ngx_quit標誌位。如果爲1,則表示“優雅”地關閉連接。這是Nginx首先將所在進程的名字改爲“worker process is shutting down”,然後調用ngx_close_listening_sockets函數來關閉監聽端口,接着設置ngx_exiting標誌位爲1,繼續向下檢查。
  4. 最後檢查ngx_reopen標誌位。如果爲1,則表示需要重新打開所有文件。調用ngx_reopen_files函數重新打開所有文件。
  5. 進入下一次循環。
發佈了88 篇原創文章 · 獲贊 9 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章