`

nginx 源码学习笔记(十五)—— ngx_master_process_cycle 多进程

 
阅读更多

了解core模块之前还应改学习ngx_start_worker_processes函数,今天我就来详细学一下这个方法,主要内容来自于http://blog.sina.com.cn/s/blog_677be95b0100iivk.html

nginx的进程启动过程是在ngx_master_process_cycle(src/os/unix/ngx_process_cycle.c)中完成的(单进程是通过ngx_single_process_cycle完成,这里只分析多进程的情况),在ngx_master_process_cycle中,会根据配置文件的worker_processes值创建多个子进程,即一个master进程和多个worker进程。进程之间、进程与外部之间保持通信,进程之间是通过socketpair进行通信的,socketpair是一对全双工的无名socket,可以当作管道使用,和管道不同的是,每条socket既可以读也可以写,而管道只能用于写或者用于读;进程与外部之间是通过信号通信的。

master进程主要进行一些全局性的初始化工作和管理worker的工作;事件处理是在worker中进行的。

进程启动的过程中,有一些重要的全局数据会被设置,最重要的是进程表ngx_processes,master每创建一个worker都会把一个设置好的ngx_process_t结构变量放入ngx_processes中,进程表长度为1024,刚创建的进程存放在ngx_process_slot位置,ngx_last_process是进程表中最后一个存量进程的下一个位置,ngx_process_t是进程在nginx中的抽象:


进程间通信是利用socketpair创建的一对socket进行的,通信中传输的是ngx_channel_t结构变量:


进程的启动过程是比较重要的一个环节,为了把这个过程分析透彻,下面会多采用首先分析ngx_master_process_cycle函数,可以分解为以下各步骤:

1、master设置一些需要处理的信号,这些信号包括

SIGCHLD,SIGALRM,SIGIO,SIGINT,NGX_RECONFIGURE_SIGNAL(SIGHUP),NGX_REOPEN_SIGNAL(SIGUSR1),
NGX_NOACCEPT_SIGNAL(SIGWINCH),NGX_TERMINATE_SIGNAL(SIGTERM),NGX_SHUTDOWN_SIGNAL(SIGQUIT),
NGX_CHANGEBIN_SIGNAL(SIGUSR2);




2、调用ngx_setproctilte设置进程标题,title = "master process" + ngx_argv[0] + ... + ngx_argv[ngx_argc-1];




3、调用ngx_start_worker_processes(cycle, ccf->worker_processes, NGX_PROCESS_RESPAWN)启动worker进程;




4、调用ngx_start_cache_manager_processes(cycle, 0)启动文件cache管理进程,有些模块需要文件cache,比如fastcgi模块,这些模块会把文件cache路径添加到cycle->paths中,文件cache管理进程会定期调用这些模块的文件cache处理钩子处理一下文件cache;


注释代码的方式分析。5、master循环处理信号量。


下一节,继续讲子进程创建,和所做的操作。

分享到:
评论

相关推荐

    ngx_http_proxy_connect_module.zip

    4. 配置Nginx服务器块:在Nginx的配置文件(如nginx.conf)中,为需要启用代理服务的域或端口定义一个新的服务器块,并设置相应的代理规则。 配置示例: ```nginx server { listen 8080; location / { proxy_...

    ngx_devel_kit-0.3.0

    ngx_devel_kit(通常缩写为 NDK)是一个针对Nginx的模块开发工具集,它为构建自定义Nginx模块提供了便利。在Nginx生态系统中,NDK是一个重要的扩展工具,允许开发者利用C语言直接操作Nginx的内部结构,以实现更高级...

    ngx_lua_module-windows-1.1.2.0

    ngx_lua_module是一款强大的扩展模块,专为Nginx服务器设计,允许在Nginx配置文件中直接嵌入Lua脚本,极大地增强了Nginx的功能和灵活性。这个"ngx_lua_module-windows-1.1.2.0"是该模块的一个Windows版本,适应于...

    ngx_http_consistent_hash-master.zip

    "nginx" 表明这个话题与 Nginx 服务器软件有关,而 "一致性哈希模块" 暗示我们讨论的是 Nginx 中用于处理一致性哈希功能的扩展模块。 **压缩包子文件列表:** 由于未提供具体的子文件列表,我们假设该压缩包包含了...

    ngx_http_proxy_connect_module-master (2).zip

    用于nginx的http正向代理https使用的模块

    nginx限制连接数ngx_http_limit_conn_module模块1

    【Nginx 限制连接数 ngx_http_limit_conn_module 模块详解】 在互联网服务中,服务器经常面临流量异常、负载过大的情况,尤其在遭受大流量恶意攻击时,带宽的浪费、服务器压力的增大都会对业务造成严重影响。为了...

    lua-upstream-nginx-module, Nginx C 模块将Lua向ngx_lua公开,用于 Nginx upstreams.zip

    lua-upstream-nginx-module, Nginx C 模块将Lua向ngx_lua公开,用于 Nginx upstreams 电子邮件名称ngx_http_lua_upstream - Nginx MODULE,用于向 Nginx upstreams公开Lua到 ngx_lua目录NAME状态概要说明函数get_...

    Nginx的SQLite模块ngx_sqlite.zip

    ngx_sqlite 是嵌入 sqlite 数据库的 nginx 模块。通过强大的nginx server,可以使用http协议访问sqlite数据库。环境- sqlite 3- nginx-1.6.3 安装```sh $ git clone https://github.com/rryqszq4/ngx_sqlite.git...

    nginx缓存清除插件ngx_cache_purge.zip

    ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_cache_purge on|off|<method> [from all|<ip> [.....

    ngx_cache_purge_2.4.2.tar.gz

    这个版本2.4.2的压缩包包含了ngx_cache_purge模块的所有源代码及相关文件,以便开发者在自己的Nginx环境中集成和使用。 Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,广泛应用于互联网服务。其内置的...

    Nginx安装+nginx_upstream_check_module后端健康检查

    patch -p0 < ../nginx_upstream_check_module-master/check_1.9.2+.patch ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module --with-http_stub_status_module --with-pcre \ --with-...

    ngx_devel_kit-0.2.19.tar.gz

    ngx_devel_kit是Nginx的一个重要扩展模块,它为Nginx提供了一系列的开发工具,方便开发者在Nginx上构建自定义模块。这个0.2.19版本的压缩包“ngx_devel_kit-0.2.19.tar.gz”包含了用于编译和开发Nginx模块所需的源...

    Nginx模块ngx_req_status

    ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求、以及各url域名所消耗的带宽是多少。ngx_req_status提供了这些功能. 1、按...

    使用nginx作为http/https正向代理ipm包,包含ngx_http_proxy_connect_module 模块,第三方图片代理,带有缓存

    使用nginx作为http/https正向代理ipm包,包含ngx_http_proxy_connect_module 模块,附带了第三方图片...下载后执行:rpm -ivh nginx-1.12.2-1.el7_4.ngx.x86_64.rpm 打包教程:https://www.jianshu.com/p/cd1c04c31534

    ngx_stream_ssl_preread_module调研.docx

    NGX_STREAM_SSL_PREREAD_MODULE 模块调研 NGX_STREAM_SSL_PREREAD_MODULE 是一个基于流媒体(Stream)实现的 SSL/TLS 协议 ClientHello 消息提取模块,主要用于提取 SNI(Server Name Indicate)或者 ALPN...

    ngx_lua_waf-master.zip_lua_nearly11h_nginx_ngx_lua_waf

    ngx_lua_waf是一个基于Nginx的Web应用防火墙,其核心是利用了Nginx的ngx_lua模块,通过Lua脚本实现灵活且强大的安全防护功能。ngx_lua_waf项目名称中的“master”通常指的是该项目的主分支或最新版本。"nearly11h...

    ngx_http_dav_ext_module.so

    ngx_http_dav_ext_module.so centos7 nginx 1.18 可以作为模块加载

    ngx_image_thumb-master.zip

    ngx_image_thumb-master.zip是这个项目的源代码压缩包,包含了所有必要的文件,以便用户下载后进行编译和安装。 Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于互联网服务。ngx_image_thumb作为其第三方模块...

    nginx-1.25.4-x86-64-ngx-http-proxy-connect-module

    增加了ngx_http_proxy_connect_module模块的,已经编译好的windows exe文件。 可以正向代理https请求。来源地址:https://github.com/dyq94310/nginx-build-msys2/releases 使用方法,放到从官网下的nginx windows...

Global site tag (gtag.js) - Google Analytics