进程交互模型图
worker process 工作进程
使用pstack < pid > 看出子进程的堆栈:
#0 0x0000003d87ce8f13 in __epoll_wait_nocancel () from /lib64/libc.so.6
#1 0x000000000043eecf in ngx_epoll_process_events ()
#2 0x000000000042ff64 in ngx_process_events_and_timers ()
#3 0x000000000043cea1 in ngx_worker_process_cycle ()
#4 0x00000000004397c2 in ngx_spawn_process ()
#5 0x000000000043bd31 in ngx_start_worker_processes ()
#6 0x000000000043b371 in ngx_master_process_cycle ()
#7 0x0000000000407662 in main ()
由此可以看到,如果使用gdb或者lldb调试 worker process, 可以在下面进行断点:
delta = ngx_current_msec;
(void) ngx_process_events(cycle, timer, flags);
delta = ngx_current_msec - delta;
其中:ngx_process_events 指向的就是ngx_epoll_process_events 函数,用的是c语言中的函数指针。