quit信号其实和前面介绍的stop 基本一样,唯一的不同之处就是quit是一种优雅的停止,也就是进程如果还在服务中,那么就不会关闭该进程,直到进程完成服务为止。当然这个过程中不能再接受新的任务了。

一 master接受到quit信号后

//收到quit信号 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): ngx_quit = 1; action = ", shutting down"; break;

二 master看到 ngx_quit 为1 的时候

//收到quit信号 if (ngx_quit) { ngx_signal_worker_processes(cycle, ngx_signal_value(NGX_SHUTDOWN_SIGNAL)); //关闭监听socket ls = cycle->listening.elts; for (n = 0; n < cycle->listening.nelts; n++) { if (ngx_close_socket(ls[n].fd) == -1) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno, ngx_close_socket_n " %V failed", &ls[n].addr_text); } } cycle->listening.nelts = 0; continue; }

除了向子进程发送 quit 信号外,还关闭master进程的的listening,这样意思是不接受请求了,但是master进程本来就不接受请求的,为什么在这里关闭呢?

三  子进程收到信号后

//quit case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): ngx_quit = 1; action = ", shutting down"; break;

四  子进程看到ngx_quit

//退出子进程 if (ngx_quit) { ngx_quit = 0; ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "gracefully shutting down"); ngx_setproctitle("worker process is shutting down"); if (!ngx_exiting) { //关闭监听socket ngx_close_listening_sockets(cycle); ngx_exiting = 1; } }

首先关闭监听个socket , 然后把ngx_exiting设置为1 ,表示进程当前是出于退出的过程中。

五 子进程在退出中会进行下面的调用

//正在退出中 if (ngx_exiting) { c = cycle->connections; for (i = 0; i < cycle->connection_n; i++) { /* THREAD: lock */ //idle 是 keepalive的,所以这处理 if (c[i].fd != -1 && c[i].idle) { c[i].close = 1; c[i].read->handler(c[i].read); } } //没有工作事件了 if (ngx_event_timer_rbtree.root == ngx_event_timer_rbtree.sentinel) { ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting"); ngx_worker_process_exit(cycle); } }

这里查看所有的连接,如果有keepalive的,那么处理读事件(为什么不用处理写,这个还需要后面看看keepalive做了什么)

最后在看看还有没有未超时的事件,如果没有了,那么进程就可以退出了。

下面的过程和stop 一样,就不介绍了。

nginx signal 之 quit相关推荐

  1. Signal QQmlEngine::quit() emitted, but no receivers connected to handle it.

    使用的是Rectangle,在main.cpp中添加头文件: #include<QQmlEngine> main函数中添加: QObject::connect(viewer.engine( ...

  2. nginx php7 fastcgi,Windows下搭建PHP7+FastCGI+Nginx环境

    注意这里说的是FastCGI,不是FPM,FPM全称是FastCGI Process Manager,它是FastCGI进程管理器,在Windows下是没有这个的,只能手动启动FastCGI进程由它自 ...

  3. 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级

     1.启动nginx的方式: cd /usr/local/nginx ls ./nginx -c nginx.conf 2.查看nginx的进程方式: [root@localhost nginx] ...

  4. Nginx服务的信号控制

    Nginx服务的信号控制 Nginx中的master和worker进程? Nginx的工作方式? 如何获取进程的PID? 信号有哪些? 如何通过信号控制Nginx的启停等相关操作? 前面在提到Ngin ...

  5. 总结与整理:Ubuntu系统下安装、配置Nginx及其他注意事项

    在Ubuntu下安装Nginx有以下方法,但是如果想要安装最新版本的就必须下载源码包编译安装. 一.基于APT源安装 sudo apt-get install nginx 1.安装好的文件位置: /u ...

  6. nginx ---- 启停

    对于Nginx的启停在linux系统中也有很多种方式,我们本次课程介绍两种方式: Nginx服务的信号控制 Nginx的命令行控制 方式一: Nginx 服务的信号控制 前面在提到Nginx的高性能, ...

  7. CentOS7安装PHP开发环境1-源码安装Nginx

    OS:CentOS 7 Nginx:1.16.0 目录 安装后的脚本 重启nginx.PHP脚本 开机启动脚本 安装前的准备 1.安装Nginx所需的pcre库 2.安装Nginx所需的openssl ...

  8. nginx - nginx的安装部署

    目录 什么是nginx? 1. nginx的安装 1.1  yum安装和编译安装的区别 1.1.1  yum安装的优点和缺点 1.1.2 编译安装的优点和缺点 1.2  nginx编译安装脚本 1.3 ...

  9. Windows nginx 操作和配置

    Windows nginx 操作和配置 Windows 上的 nginx 只是一个简单的程序,并不是以服务的形式存在的. 所以只需要操作原可执行文件即可. 一.下载解压 官方下载地址: http:// ...

最新文章

  1. 提升方法---提升树
  2. Android---手动创建线程与GUI线程同步(三)
  3. spring3.2 @Scheduled注解 定时任务
  4. 禁用UpdateOrchestrator重新启动任务
  5. 【英语学习】【Daily English】U10 Education L01 Is this certificate a must?
  6. java标识符定义_Java标识符命名规范
  7. 二十一天学通JavaScript:cookie的安全性
  8. java seo优化_java的seo优化-SEO技能未来发展前景
  9. Executing an update/delete query
  10. html怎么做左侧广告,网站横幅怎么制作,html横幅广告代码
  11. 三国志战略版:求贤之我要换啥
  12. CloudCompare源码分析之ccViewer模块:应用类(阅读经典)
  13. 如何记账,筛选指定收支类别
  14. openssh移植 for pycharm 远程调试 sftp
  15. ocr识别软件测试点,屏幕取词和OCR取词测试
  16. Maven Download Sources 失败
  17. java数组游戏_基于java的挖地雷游戏
  18. 【C语言】运算符的优先级,结合方向(自左向右运算、自右向左运算)
  19. POJ1013Counterfeit Dollar
  20. OpenMax在Android上的实现

热门文章

  1. R统计-微生物群落结构差异分析及结果解读
  2. 朴素贝叶斯分类算法--终极奥义
  3. 从零学Linux第一章——操作系统演变及历史介绍
  4. java向前缩进的快捷键_C++(十四) — 常用快捷键总结
  5. 激活层是每一层都有吗_广式小吃甜“薄撑”,又香又脆,每一层都有料,大人小孩都爱吃...
  6. INFORMS 及 EJOR 系列主编汇总
  7. java怎么设置cookie?java设置cookie教程
  8. vivos机器人_【vivoNEXS评测】操作:人工智能无处不在 Jovi AI正在接管系统-中关村在线...
  9. itchat 调用微信网页版 python 调用微信
  10. 模拟CMOS集成电路设计 学习笔记(二)