Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225849
  • 博文数量: 59
  • 博客积分: 1215
  • 博客等级: 少尉
  • 技术积分: 575
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-09 02:18
文章分类

全部博文(59)

文章存档

2012年(53)

2011年(6)

分类: C/C++

2012-02-23 17:38:16

    这一篇先来分析Nginx的进程管理,以便接下来的研究。
  先来看一下ngx_spawn_process:(参考了作者: simohayha  )
1、有一个ngx_processes全局数组,包含了所有的存货的子进程,这里会fork出来的子进程放入到相应的位置。
并设置这个进程的相关属性。
2 、创建socketpair,并设置相关属性。父子进程就靠这里创建的channel通信。
3 、在子进程中执行传递进来的函数。
 
进程的数据结构为:
  1. typedef struct {
  2.     ngx_pid_t pid;
  3.     int status;
  4.     ngx_socket_t channel[2];           //通信的channel

  5.     ngx_spawn_proc_pt proc;            //fork之后子进程将会调用的函数
  6.     void *data;
  7.     char *name;

  8.     unsigned respawn:1;
  9.     unsigned just_spawn:1;
  10.     unsigned detached:1;
  11.     unsigned exiting:1;
  12.     unsigned exited:1;
  13. } ngx_process_t;
接下来看一个channel的类型:
  1. typedef struct {
  2.      ngx_uint_t command;
  3.      ngx_pid_t pid;
  4.      ngx_int_t slot;        //在全局进程表中的位置
  5.      ngx_fd_t fd;           //channel对应的fd
  6. } ngx_channel_t;
很容易看懂。懂点英文就行。
那有什么用呢?就是用来进程间通信。
好,接着看:ngx_master_process_cycle。里面的主要函数有:
ngx_start_worker_processes这个函数顾名思义,创建worker子进程,还有把新建子进程描述符传给各个worker子进程方便联系。
 
阅读(1606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~