nginx for windows中的一项缺陷

按照官网上的说法,使用 start nginx 启动 nginx,使用 nginx -s quit 可以优雅地退出。

经实验,使用 start nginx 之后,会启动两个 nginx 的进程,据官网上说,一个是控制进程,一个是工作进程(One of the processes is the master process and another is the worker process.)。

当我们启动进程之后,现在 nginx 可以开始工作了,但当我们再次使用 start nginx 之后,会发现又启动了两个进程。

现在我们使用 nginx -s quit 命令,会发现还剩下两个进程,再使用 nginx -s quit,会报错啊。。。,但其实现在还有两个 nginx.exe 进程。使用 nginx -s reload 呢,也会报错。

存在这种现象导致的问题就是,如果我不小心使用了两次 start nginx,那实际在监听 80 端口(或者是其它端口)的是第一次启动的,所以当我修改了配置文件,然后 nginx -s reload,会发现对配置文件的修改并没有起作用。然后使用 nginx -s quit 来优雅地退出,会发现 nginx 竟然还能用。

解决方法是使用 taskkill命令强制终止进程。

为什么会出现这种问题呢,观察+猜测一下吧:

当使用 start nginx 命令之后,会产生 ./logs/nginx.pid 这个文件,文件中记录了 nginx.exe 的pid,当重复使用 start nginx 时,nginx.pid 中的内容会被后来者替换,这样 nginx.exe 就不知道之前启动的那些自己的进程的 pid 是什么了。之前启动的那些 nginx.exe 的进程已经被 nginx.exe 抛弃了(还被系统领养着,#_#)。

时间: 2024-10-17 20:54:13

nginx for windows中的一项缺陷的相关文章

Nginx在Windows平台的配置

Nginx在Windows平台的配置 能够使用Nginx搭建Tomcat集群,并完成负载均衡. 1.什么是Nginx 2.为什么使用Nginx 背景: 互联网飞速发展的今天,大用户量高并发已经成为互联网的主体.怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢?这是一些中小网站急需解决的问题.用单机tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量在150到200左右.按照并发访问量占总用户数量的5%到10%这样计算,单点tomcat网站的用户人数在1500到4000左右.对于

跨过Nginx上基于uWSGI部署Django项目的坑

先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多个协议,如WSGI,HTTP协议,还有它自己的uwsgi协议,想了解更多关于uWSGI和uwsgi协议内容可以查阅这里.这样和fastcgi类似,请求和响应的流程如下: Request > Nginx > uWSGI > Django > uWSGI > Nginx > R

ASP.NET 5 中的依赖项管理

ASP.NET 5 中的依赖项管理? 提示 本文链接: http://cnblogs.com/qin-nz/p/5034398.html 或 http://blog.qin.nz/aspnet5/aspnet5-dependency-management.html 做过实际开发的都知道,我们需要引用各种各样的类库来帮助我们完成项目的开发. 本文将从服务器端和浏览器端两个方面介绍ASP.NET 5 中的依赖项管理. 服务器端代码使用 Nuget 作为包管理器? 对于已经习惯使用 Visual St

Linux启动kettle及linux和windows中kettle往hdfs中写数据(3)

在xmanager中的xshell运行进入图形化界面 1 sh spoon.sh 新建一个job 1.往hdfs中写数据 1)linux中kettle往hdfs中写数据 双击hadoop copy files 运行此job 查看数据: 1)windows中kettle往hdfs中写数据 Windows中往power服务器中hdfs写数据 日志: 2016/07/28 16:21:14 - Version checker - OK 2016/07/28 16:21:57 - 数据整合工具-作业设计

命名空间 system.windows 中不存在类型或命名空间名称 forms (是否缺少程序集引用 )错误

C#项目: 添加“using System.Windows.Forms;”之后提示“命名空间 system.windows 中不存在类型或命名空间名称 forms (是否缺少程序集引用 )”错误, 查询知缺少System.Windows.Forms程序集,在VS2015中添加次程序集,步骤为: 项目>添加引用 在图中右上角搜索框中搜索“System.Windows.Forms”,出现如下选项: 勾选“System.Windows.Forms”项,确定,即可.

在Windows中实现Java调用DLL(转载)

本文提供调用本地 C 代码的 Java 代码示例,包括传递和返回某些常用的数据类型.本地方法包含在特定于平台的可执行文件中.就本文中的示例而言,本地方法包含在 Windows 32 位动态链接库 (DLL) 中. 不过我要提醒您,对 Java 外部的调用通常不能移植到其他平台上,在 applet 中还可能引发安全异常.实现本地代码将使您的 Java 应用程序无法通过 100% 纯 Java 测试.但是,如果必须执行本地调用,则要考虑几个准则: 将您的所有本地方法都封装在单个类中,这个类调用单个

控制面板中java设置项如何删除

卸载jdk或者jre后,如果控制面板中仍然有java项,重新安装可能仍然无法设置,提示找不到"javacpl.exe" 解决办法:删除C:\windows\system32\下的java*.cpl,删除即可. 控制面板中java设置项如何删除,布布扣,bubuko.com

windows中根据进程PID查找进程对象过程深入分析

这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的. 句柄是针对进程而言,也就是句柄一定所属于某个进程,为某个进程私有的资源.句柄的分配来自于进程私有的句柄表.而进程PID和线程TID和句柄的分配原理是一样的,但是来源就不同了.进程PID来源于系统中一张全局的句柄表PSpcidtable.从级别上来说Pspcidtable和进程对象eprcess中的objecttab

Nginx 在 Windows下的安装

Nginx("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 . Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了.Igor 将源代码以类BSD许可证的形式发布.自Nginx 发布四年来,Nginx 已经因为它的稳定性.丰富的功能集. 示例配置文件和低系统资源的消耗而闻名了.目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等