这一篇先来分析Nginx的进程管理,以便接下来的研究。
先来看一下ngx_spawn_process:(参考了作者: simohayha )
1、有一个ngx_processes全局数组,包含了所有的存货的子进程,这里会fork出来的子进程放入到相应的位置。
并设置这个进程的相关属性。
2 、创建socketpair,并设置相关属性。父子进程就靠这里创建的channel通信。
3 、在子进程中执行传递进来的函数。
进程的数据结构为:
- typedef struct {
- ngx_pid_t pid;
- int status;
- ngx_socket_t channel[2]; //通信的channel
- ngx_spawn_proc_pt proc; //fork之后子进程将会调用的函数
- void *data;
- char *name;
- unsigned respawn:1;
- unsigned just_spawn:1;
- unsigned detached:1;
- unsigned exiting:1;
- unsigned exited:1;
- } ngx_process_t;
接下来看一个channel的类型:
- typedef struct {
- ngx_uint_t command;
- ngx_pid_t pid;
- ngx_int_t slot; //在全局进程表中的位置
- ngx_fd_t fd; //channel对应的fd
- } ngx_channel_t;
很容易看懂。懂点英文就行。
那有什么用呢?就是用来进程间通信。
好,接着看:ngx_master_process_cycle。里面的主要函数有:
ngx_start_worker_processes这个函数顾名思义,创建worker子进程,还有把新建子进程描述符传给各个worker子进程方便联系。
阅读(1638) | 评论(0) | 转发(0) |