Nginx进程管理
来源:Java高级架构技术     阅读:705
动云科技
发布于 2018-07-16 22:53
查看主页
Nginx进程管理

nginx进程管理==> master + 多个worker进程

master进程:全局的初始化 和管理 worker进程

worker进程:主要业务逻辑,事件解决

通信:socketpair ==> 每次fork完一个子进程后都把句柄传给前面已经存在的进程,以达到子进程间通信

nginx有多进程启动和单进程启动

Nginx进程管理

主要分析多进程启动:

nginx中的fork在ngx_spawn_process函数中进行

ngx_pid_t

ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data,char *name, ngx_int_t respawn)

第一个参数是全局的配置,第二个参数是子进程需要执行的函数,第三个参数是proc的参数,第四个类型

/*作使用::

1 有一个ngx_processes全局数组,包含了所有的存货的子进程,这里会fork出来的子进程放入到相应的位置。

并设置这个进程的相关属性。

2 创立socketpair,并设置相关属性。

3 在子进程中执行传递进来的函数。

*/

nginx进程结构:

typedef struct

{

ngx_pid_t pid; //进程的ID

int status; //进程的退出状态

ngx_socket_t channel[2]; //使用于socketpair通信的一对socket句柄

ngx_spawn_proc_pt proc; //进程的执行函数

void *data; //proc的参数

char *name; //进程的title标识

unsigned respawn:1; //进程的状态:重新创立的

unsigned just_spawn:1; //进程的状态: 第一次创立的

unsigned detached:1; //进程的状态: 分离的,独立的

unsigned exiting:1; //进程的状态: 正在退出的

unsigned exited:1; //进程的状态: 已经退出的

} ngx_process_t;(src/os/unix/ngx_process.h)

master每创立一个worker都会把一个设置好的ngx_process_t结构变量放入ngx_processes中,新创立的进程存放在ngx_process_slot位置(遍历数组,查看能否空闲 id == -1)

master进程向worker子进程发送命令是通过socketpair创立的一对socket实现的,之间传输的是ngx_channel_t结构变量:

typedef struct

{

ngx_uint_t command; //发送的命令

ngx_pid_t pid; //发送方进程的进程id

ngx_int_t slot; //发送方进程在进程表中偏移位置

ngx_fd_t fd; //发送给对方的文件句柄

} ngx_channel_t;(src/os/unix/ngx_channel.h)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

Nginx进程管理

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 Linux
相关推荐
EOS RPC 接口根据 txID 查询交易代码示例 - EOS 区块链开发实战
CSS Grid网格布局全攻略
浅谈互联网时代下的大数据基础知识,这些你理解了吗?
Mybatis#BaseExecutor源码解析
CentOS 7.2 云主机编译 Redis 5.0 RC4
首页
搜索
订单
购物车
我的