Nginx启动流程(二)(main函数分析)

本文详细介绍了 Nginx 中的进程管理机制,包括核心数据结构 ngx_process_t 的定义及其各个字段的作用,如进程 ID、状态、通信通道等,并解释了这些字段在 Nginx 子进程管理和通信中的作用。

#define ngx_get_conf(conf_ctx, module)  conf_ctx[module.index]


ngx_process_t    ngx_processes[NGX_MAX_PROCESSES]; //存储所有子进程的数组  ngx_spawn_process中赋值


ngx_process_t :

typedef struct {
    ngx_pid_t           pid; //进程ID
    int                 status; //子进程退出后,父进程收到SIGCHLD后,开始waitpid,父进程由waitpid系统调用获取到的进程状态,见ngx_process_get_status

    /*
    这是由socketpair系统调用产生出的用于进程间通信的socket句柄,这一对socket句柄可以互相通信,目前用于master父进程与worker子进程问的通信,详见14.4节
    */
    ngx_socket_t        channel[2];//socketpair实际上是通过管道封装实现的 ngx_spawn_process中赋值

    //子进程的循环执行方法,当父进程调用ngx_spawn_proces生成子进程时使用
    ngx_spawn_proc_pt   proc;

    /*
    上面的ngx_spawn_proc_pt方法中第2个参数雷要传递1个指针,它是可选的。例如,worker子进程就不需要,而cache manage进程
    就需要ngx_cache_manager_ctx上下文成员。这时,data一般与ngx_spawn_proc_pt方法中第2个参数是等价的
    */
    void               *data;
    char               *name;//进程名称。操作系统中显示的进程名称与name相同

    //一下这些前三个标记在ngx_spawn_process中赋值
    unsigned            respawn:1; //标志位,为1时表示在重新生成子进程

    unsigned            just_spawn:1; //标志位,为1时表示正在生成子进程

    unsigned            detached:1; //标志位,为1时表示在进行父、子进程分离
    unsigned            exiting:1;//标志位,为1时表示进程正在退出

    unsigned            exited:1;//标志位,为1时表示进程已经退出  当子进程退出后,父进程收到SIGCHLD后,开始waitpid,见ngx_process_get_status
} ngx_process_t;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值