第二十一讲:使用信号管理Nginx的父子进程

  Nginx是一个多进程的程序,多进程之间进行通讯可以使用共享内存,信号等,但是我们在做进程间的管理时,通常只使用信号;下面我们来看下nginx的信号是怎样使用的?

  能够发送和处理信号的有master进程,worker进程和nginx命令行;

  

    

 

 

     我们先来看master进程,因为master进程会启动worker进程,所以它管理worker进程的方式首先是监控worker进程有没有发送CHLD信号,因为nginx操作系统中规定,当子进程终止的时候会向父进程CHLD信号;所以如果worker进程由于一些模块出现BUG,导致worker进程意外的终止掉;那么master进程可以立刻通过CHLD发现这样一个事件;重新把worker进程拉起;那么master进程还会通过接收一些信号;来管理worker进程;

    master进程可以接收哪些信号尼? TERM,INT,QUIT,HUP,USR1,USR2,WINCH;

    TERM,INT,QUIT,HUP,USR1 可以通过nginx命令行 加上特定的命令向master进程发送命令的;

    USR2,WINCH 只能通过kill Linux命令行直接向master进程发送信号;也就是说我们需要先找到master进程所在的pid,对这个pid 直接发送USR2和WINCH;

    

    worker进程可以接收哪些信号尼? TERM,INT,QUIT,HUP,USR1,WINCH;

    为什么我们通常是不对worker进程发送信号尼?

    因为我们希望由master进程来管理worker进程;如果直接对worker进程发送信号,也会在worker进程产生同样的结果;所以我们往往是对master进程进行管理;master进程收到信号以后,会去再把信号发送给worker进程;

    而nginx命令行尼?

    当我们启动了nginx以后,nginx会把它的pid记录在一个文件中,通常是记录在nginx的安装目录中logs文件夹下的一个nginx.pid文件中,这个pid文件会记录master进程的进程pid;那这个时候我们再执行nginx -s 这样的命令行的时候,那么nginx这个工具命令行它就会读取pid文件中的master进程的pid,向这个pid同样去发生HUP,USR1,TERM,QUIT这样的信号;而这样的信号对应的我们命令就是reload,reopen,stop,quit;所以我们可以看到调用nginx命令行发生相应的命令和直接用kill发送信号产生的效果是一样的;

    

    

    

    

 

posted @ 2020-03-07 11:05  痞子胥  阅读(383)  评论(0)    收藏  举报