ngx_cycle_s
ngx_cycle_s結構體
typedef ngx_cycle_s ngx_cycle_t;
struct ngx_cycle_s {
/* 保存着所有模塊存儲配置項的結構體指針,它首先是一個數組,每個數組成員又是一個指針,
這個指針指向另一個存儲着指針的數組 */
void ****conf_ctx;
//內存池
ngx_pool_t *pool;
/* 日誌模塊中提供生成計本ngx_log_t日誌對象的功能,這裏的log是還沒有解析配置前,重定向到屏幕的。
在ngx_init_cycle函數執行後,會更需nginx.conf中的配置項重新構造出log */
ngx_log_t *log;
/* new_log暫時存儲根據nginx.conf生成的新log,之後會賦值給上述log */
ngx_log_t new_log;
ngx_uint_t log_use_stderr; /* unsigned log_use_stderr:1; */
/* 對於poll、rtsig這樣的事件模塊,會以有效文件句柄來預先建立ngx_connection_t結構體,以加速事件
的收集和分發。這時,files就會保存所有ngx_connection_t的指針組成的數組。 */
ngx_connection_t **files;
//可用連接池
ngx_connection_t *free_connections;
//可用連接池的總數
ngx_uint_t free_connection_n;
//可以重複使用連接隊列
ngx_queue_t reusable_connections_queue;
//監聽端口數組,ngx_listening_t
ngx_array_t listening;
//保存着Nginx所有要操作的目錄
ngx_array_t paths;
//ngx_open_file_t結構體組成的數組,表示Nginx已經打開的所有文件。由模塊添加,ngx_init_cycle中打開
ngx_list_t open_files;
//ngx_shm_zone_t組成的數組,每個元素表示一塊共享內存
ngx_list_t shared_memory;
//當前進程中所有連接對象的總數
ngx_uint_t connection_n;
//上述files中存在的有效文件句柄個數
ngx_uint_t files_n;
//指向當前進程中的所有連接對象
ngx_connection_t *connections;
//指向當前進程中的所有讀事件對象
ngx_event_t *read_events;
//指向當前進程中所有寫事件對象
ngx_event_t *write_events;
//用於引用上一個ngx_cycle_t對象
ngx_cycle_t *old_cycle;
//配置文件相對於安裝目錄的路徑名稱
ngx_str_t conf_file;
//處理配置文件時需要特殊處理的命令行攜帶參數
ngx_str_t conf_param;
//配置文件所在目錄的路徑
ngx_str_t conf_prefix;
//Nginx安裝目錄的路徑
ngx_str_t prefix;
//用於進程間同步文件鎖名稱
ngx_str_t lock_file;
//gethostname得到的主機名
ngx_str_t hostname;
};
ngx_cycle_s結構體支持的主要方法
函數名 | 參數含義 | 執行意義 |
---|---|---|
ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle) | old_cycle表示臨時的ngx_cycle_t指針,一般僅用來傳遞ngx_cycle_t結構體中的配置文件路徑等 | 返回初始化成功的完整的ngx_cycle_t結構體 |
ngx_int_t ngx_process_options(ngx_cycle_t *cycle) | cycle通常是剛剛分配的ngx_cycle_t結構體指針 | 用運行Nginx可能攜帶的目錄參數來初始化cycle |
ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle) | 同上 | 通過該函數來使用已經打開的TCP監聽端口 |
ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle) | 同上 | 監聽、綁定cycle中的listening動態數組指定的相應端口 |
void ngx_configure_listening_sockets(ngx_cycle_t *cycle) | 同上 | 根據nginx.conf中的配置項設置已經監聽的句柄 |
void ngx_close_listening_sockets(ngx_cycle_t *cycle) | 同上 | 關閉cycle的listening中的套接字 |
void ngx_master_process_cycle(ngx_cycle_t *cycle) | 同上 | 進入master進程的工作循環 |
void ngx_single_process_cycle(ngx_cycle_t *cycle) | 同上 | 進入單進程(非master、worker進程工作模式的工作循環 |
void ngx_start_cache_manager_processes(ngx_cycle_t *cycle,ngx_channel_t *ch) | 同上,ch是將要向子進程發送的信息 | 向所有已經打開的channel(通過socketpair生成的句柄進行通信)發送ch信息 |
void ngx_signal_worker_processes(ngx_cycle_t *cycle,int signo) | 同上,signo是信號 | 處理worker進程接收到的信號 |
ngx_uint_t ngx_reap_children(ngx_cycle_t *cycle) | 同上 | 檢查master進程的所有子進程,根據每個子進程的狀態判斷是否要啓動子進程 |
void ngx_master_process_exit(ngx_cycle_t *t) | 同上 | 退出master工作循環 |
void ngx_worker_process_cycle(ngx_cycle_t *cycle,void *data) | 同上 | 進入worker工作循環 |
void ngx_worker_process_init(ngx_cycle_t *cycle,ngx_uint_t priority) | 同上,priority是worker進程的系統優先級 | 進入worker進程工作循環之前的初始化工作 |
void ngx_cache_manager_process_cycle(ngx_cycle_t *cycle,void *data) | 同上,data是傳入ngx_cache_manager_ctx_t結構體的指針 | 執行緩存管理工作的循環方法 |
void ngx_worker_process_exit(ngx_cycle_t *cycle) | 同上 | 退出worker進程工作循環 |
void ngx_process_events_and_timers(ngx_cycle_t *cycle) | 同上 | 使用事件模塊處理截止到目前已收到的事件 |