Nginx学习笔记之使用信号管理Nginx的父子进程

声明:图片来自  github:https://github.com/russelltao/geektime-nginx 

使用信号管理Nginx的父子进程


  • Nginx是一个多进程的程序,多进程之间进行通信可以使用共享内存,信号等。
  • 在做进程间的管理时,通常只使用信号。
  • 能够发送和处理信号的有Master进程,Worker进程,还有Nginx命令行。


  • Master进程
    • 因为master进程可以启动worker进程,所以它管理worker进程的方式首先是监控worker进程有没有发送CHLD信号。因为linux操作系统规定,当子进程终止的时候,会向父进程发送CHLD信号。所以,如果worker进程一些模块出现了一些bug导致worker进程意外地终止掉,master进程可以立刻通过CHLD发现这样一个事件,然后重新把worker进程拉起。
    • mater进程还可以接收一些信号来管理worker进程。可以接收的信号有
      • TERMINT  表示立刻停止nginx进程
      • QUIT 优雅地停止nginx进程(可以慢慢地停,对用户不要发送立刻结束连接,像TCP的reset请求这样的报文)
      • HUP  表示重载配置文件
      • USR1 重新打开日志文件,做日志文件的切割
    • 上面四个信号可以通过使用nginx命令行加特定的命令直接向master进程发送的。
    • 下面的信号只能通过kill 这样的linux的命令行直接向master进程发送信号。所以我们得先找到master进程的PID,对这个PID直接发送USR2和WINCH。这两个信号专门做热部署时使用。

  • Worker进程
    • 通常我们不直接向worker进程发送信号,我们希望由master进程来管理worker进程。所以直接向worker进程发送信号,也会产生同样的结果。但通常我们不这样做,往往是对master进程进行管理,master进程收到信号以后,在把信号发送该worker进程

  • Nginx命令行
    • 当我们启动了Nginx以后,Nginx会把它的PID记到一个文件中,通常是记录到安装目录下的logs文件夹下的一个nginx pid文件中,这个pid文件中会记录master进程pid。
      • 当我们再次执行 nginx -s 命令行的时候,那么nginx工具命令行会去读取pid文件中的master进程 的 pid,向这个pid同样的发送 HUP USR1 TERM QUIT这样的信号。
    • 其实,调用nginx的命令行发送相应的命令,和直接使用 kill 去发送信号效果是一样的
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值