文章4:Nginx进程管理之 ngx_master_process_cycle分析

欢迎转载,转载请注明出处http://blog.csdn.net/yankai0219/article/details/8453267

0.序

本文中内容与文章1有些重复,不过在本文中讲述了用gdb调试的过程值得一看。

1.牵涉到的知识点:


关于这里面的一些重要知识点分析:
1. 牵涉到信号的知识 :这部分内容在APUE(UNIX环境高级编程)chap10中详细讲解
2. 牵涉到进程通信的知识
3. 牵涉到进程创建的知识:在ngx_spawn_process中,master进程fork出worker子进程。在子进程中进入ngx_worker_process_cycle.在父进程中,master进程将worker子进程的pid等信息传递给前面已经创建好的worker子进程。然后循环创建ccf->worker_processes个worker子进程。

2.关于GDB调试ngx_master_process_cycle的技巧

1)首先,我们要知道在ngx_daemon函数中会创建守护进程。fork出守护进程。因此,要想查看master进程中执行情况,就必须set follow-fork-mode child。

2)之后都是在进程2317中进行,进程2317也就是所谓的master进程。
3)在master进程中,我们进入ngx_master_process_cycle函数,如开篇所述。
4)在ngx_spawn_process函数中会fork出worker子进程。因此,要想查看master进程中执行情况,就必须 set follow-fork-mode parent.要想查看worker子进程执行情况,就必须set follow-fork-mode child。

nginx main--------pid=2159------------------->ngx_daemon------------------>fork-----------sub process pid 2165(this is master process)----------->ngx_start_worker_processes------------------sub process pid 2188(this is worker process)--------------------------------------> 
for master process 停止在sigsuspend,等待信号到来
for worker process 进入ngx_worker_process_cycle,等待连接到来。如下图所示

3.参考文章:

  http://www.alidata.org/archives/1174 Nginx进程管理之master进程




你可能感兴趣的:(文章4:Nginx进程管理之 ngx_master_process_cycle分析)