[转帖]nginx中用到的kill命令

nginx,用到,kill,命令 · 浏览次数 : 0

小编点评

**kill命令简介** kill 命令用于在 Linux 中终止进程。它接受进程 ID(PID)作为参数,表示要终止的进程。 **kill命令格式** ```bash kill -signal pid ``` 其中: * `kill`:命令名称。 * `-signal`:指定终止信号。默认值为 `SIGKILL`。 * `pid`:要终止的进程 ID。 **常用信号** * `SIGKILL`:强制终止进程。 * `SIGINT`:发送SIGINT信号,用于强制终止程序。 * `SIGTERM`:发送 SIGTERM 信号,用于优雅地终止程序。 * `SIGQUIT`:发送 SIGQUIT 信号,用于优雅地终止程序。 * `SIGTERM`:发送 SIGTERM 信号,用于平滑升级程序。 **示例** ```bash # 终止所有运行的进程 killall # 终止所有与 "nginx" 进程相关的进程 kill -9 nginx # 优雅地停止所有运行的进程 kill -s SIGQUIT <nginx master pid>1 # 平滑升级 Nginx 服务 kill -s SIGUSR2 <nginx master pid>1 ``` **与 kill -9 和 kill -15 的区别** | 特征 | kill -9 | kill -15 | |---|---|---| | 终止方式 | 强制 | 优雅 | | 终止信号 | `SIGKILL` | `SIGQUIT` | | 平滑升级 | 不支持 | 支持 | | 使用场景 | 当需要强制终止进程或平滑升级程序时 | 当需要优雅地终止程序或进行平滑升级时 |

正文

1、kill命令

1.1、kill命令简介

我们都知道,想要在Linux中终止一个进程有两种方式,如果是前台进程可以使用Ctrl+C键进行终止;如果是后台进程,那么需要使用kill命令来终止。(其实Ctrl+C也是kill命令)。

kill命令的格式是:
kill -signal pid
其中 pid 就是进程的编号,signal是发送给进程的信号。
kill命令不仅仅是杀死进程。kill命令的真正作用是:将某信号发送给某进程或者进程组
默认参数下,kill 发送 SIGTERM(15)信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出。

1.2、kill信号

kill -l列出所有信号:

# kill -l
1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
............
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

常用信号:

信号名    信号编号     含义
HUP          1        终端断线
INT          2        中断(同 Ctrl + C)
QUIT         3        退出(同 Ctrl + \)
KILL         9        强制终止
USR1        10        USR1通常被用来告知应用程序重载配置文件
USR2        12        USR2用来做平滑升级,通知旧的进程准备升级
TERM        15        终止
CONT        18        继续(与STOP相反, fg/bg命令)
STOP        19        暂停(同 Ctrl + Z)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

1.3、kill -2、kill -9和kill -15的区别

1.3.1、kill -15

kill命令默认的信号就是15,首先来说一下这个默认的kill -15信号。

当使用kill -15时,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的。
这时候,应用程序可以选择:
1、立即停止程序
2、释放响应资源后停止程序
3、忽略该信号,继续执行程序

因为kill -15信号只是通知对应的进程要进行"安全、干净的退出",程序接到信号之后,退出前一般会进行一些"准备工作",如资源释放、临时文件清理等等,如果准备工作做完了,再进行程序的终止。
但是,如果在"准备工作"进行过程中,遇到阻塞或者其他问题导致无法成功,那么应用程序可以选择忽略该终止信号。这也就是为什么我们有的时候使用kill命令是没办法"杀死"应用的原因,因为默认的kill信号是SIGTERM(15),而SIGTERM(15)的信号是可以被阻塞和忽略的。

1.3.2、kill -9

和kill -15相比,kill -9就相对强硬一点,系统会发出SIGKILL信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。所以,相比于kill -15命令,kill -9在执行时,应用程序是没有时间进行"准备工作"的,所以这通常会带来一些副作用,数据丢失或者终端无法恢复到正常状态等

1.3.3、kill -2

功能类似于Ctrl+C是程序在结束之前,能够保存相关数据,然后再退出。
个人理解,逻辑上通常认为 kill -2来自用户主动,kill -15来自系统需要。

2、nginx命令

2.1、默认方式启动

直接执行Nginx二进制程序。例如:

/usr/local/nginx/sbin/nginx
  • 1

这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。
实际上,在没有显式指定nginx.conf配置文件路径时,将打开在configure命令执行时使用–conf-path=PATH指定的nginx.conf文件。

2.2、另行指定配置文件的启动方式

使用-c参数指定配置文件。例如:

/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
  • 1

这时,会读取-c参数后指定的nginx.conf配置文件来启动Nginx。

2.3、测试配置信息是否有错误

在不启动Nginx的情况下,使用-t参数仅测试配置文件是否有错误。例如:

/usr/local/nginx/sbin/nginx -t
  • 1

执行结果中显示配置是否正确。

2.4、快速停止服务

使用-s stop可以强制停止Nginx服务。-s参数其实是告诉Nginx程序向正在运行的Nginx服务发送信号量,Nginx程序通过nginx.pid文件中得到master进程的进程ID,再向运行中的master进程发送TERM信号来快速地关闭Nginx服务。例如:

/usr/local/nginx/sbin/nginx -s stop
  • 1

实际上,如果通过kill命令直接向nginx master进程发送TERM或者INT信号,效果是一样的。通过kill命令来发送信号:

kill -s SIGTERM 10800
  • 1

或者:

kill -s SIGINT 10800
  • 1

上述两条命令的效果与执行usrlocal/nginx/sbin/nginx-s stop是完全一样的。

2.5、“优雅”地停止服务

如果希望Nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit参数来停止服务。例如:

/usr/local/nginx/sbin/nginx -s quit
  • 1

该命令与快速停止Nginx服务是有区别的。当快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。而“优雅”地停止服务时,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

与快速停止服务相似,可以直接发送QUIT信号给master进程来停止服务,其效果与执行-s quit命令是一样的。例如:

kill -s SIGQUIT <nginx master pid>
  • 1

如果希望“优雅”地停止某个worker进程,那么可以通过向该进程发送WINCH信号来停止服务。例如:

kill -s SIGWINCH <nginx worker pid>
  • 1

2.6、使运行中的Nginx重读配置项并生效

使用-s reload参数可以使运行中的Nginx服务重新加载nginx.conf文件。例如:

/usr/local/nginx/sbin/nginx -s reload
  • 1

事实上,Nginx会先检查新的配置项是否有误,如果全部正确就以“优雅”的方式关闭,再重新启动Nginx来实现这个目的。类似的,-s是发送信号,仍然可以用kill命令发送HUP信号来达到相同的效果。

kill -s SIGHUP <nginx master pid>
  • 1

2.7、日志文件回滚

使用-s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开时就会生成新的日志文件。这个功能使得日志文件不至于过大。例如:

/usr/local/nginx/sbin/nginx -s reopen
  • 1

当然,这与使用kill命令发送USR1信号效果相同。

kill -s SIGUSR1 <nginx master pid>
  • 1

2.8、平滑升级Nginx

当Nginx服务升级到新的版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是需要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级。

升级时包括以下步骤:
1、通知正在运行的旧版本Nginx准备升级。通过向master进程发送USR2信号可达到目的。例如:

kill -s SIGUSR2 <nginx master pid>
  • 1

这时,运行中的Nginx会将pid文件重命名,如将/usr/local/nginx/logs/nginx.pid重命名为/usr/local/nginx/logs/nginx.pid.oldbin,这样新的Nginx才有可能启动成功。

2、启动新版本的Nginx。这时通过ps命令可以发现新旧版本的Nginx在同时运行。
3、通过kill命令向旧版本的master进程发送SIGQUIT信号,以“优雅”的方式关闭旧版本的Nginx。随后将只有新版本的Nginx服务运行,此时平滑升级完毕。

3、参考

kill -9 和 kill -15 的区别
Nginx读书笔记(1) —— Nginx的命令行控制
nginx平滑升级、nginx支持的kill信号

</article>

与[转帖]nginx中用到的kill命令相似的内容:

[转帖]nginx中用到的kill命令

1、kill命令 1.1、kill命令简介 我们都知道,想要在Linux中终止一个进程有两种方式,如果是前台进程可以使用Ctrl+C键进行终止;如果是后台进程,那么需要使用kill命令来终止。(其实Ctrl+C也是kill命令)。 kill命令的格式是: kill -signal pid 其中 pi

[转帖]最新版nginx内置变量

在配置基于nginx服务器的网站时,必然会用到 nginx内置变量 ,下面笔者将它整理成列表,把最新版本的变量列出来,以方便做配置时查询 nginx内置变量 内置变量存放在 ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的。总而言之,这些变量代表着客

[转帖]nginx的ip_hash算法

概念 根据用户请求的ip,利用算法映射成hash值,分配到特定的tomcat服务器中。主要是为了实现负载均衡,只要用户ip固定,则hash值固定,特定用户只能访问特定服务器,解决了session的问题。 源码分析 ip_hash算法的处理代码位于src\http\modules\ngx_http_u

[转帖]关于nginx 反向代理upstream中的 keepalive配置

一、关于nginx upstream 在nginx的模块中,分为3种类型,分别是handler,filter和upstream,其中upstream可以看做一种特殊的handler,它主要用来实现和后端另外的服务器进行通信,由于在nginx中全部都是使用非阻塞,并且是一个流式的处理,所以upstre

[转帖]浅析Nginx配置获取客户端真实IP的proxy_set_header、X-Real-IP、$remote_addr、X-Forwarded-For、$proxy_add_x_forwarded_for分别是什么意思

https://www.cnblogs.com/goloving/p/15588668.html 一、问题背景 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip,但是

[转帖]Nginx:地址重写(return和rewrite)

https://www.cnblogs.com/testopsfeng/p/15294660.html Nginx的重写指令用于改变客户端的URL请求。主要有return和rewrite。两个指令都有重写URL的能力,但rewrite支持更复杂的功能。 Return指令 在server中返回 301

【转帖】nginx变量使用方法详解-6

https://www.diewufeiyang.com/post/580.html Nginx 内建变量用在“子请求”的上下文中时,其行为也会变得有些微妙。 前面在 (三) 中我们已经知道,许多内建变量都不是简单的“存放值的容器”,它们一般会通过注册“存取处理程序”来表现得与众不同,而它们即使有存

[转帖]用了这18种方案,接口性能提高了100倍!

https://juejin.cn/post/7167153109158854687 前言 大家好,我是捡田螺的小男孩。 之前工作中,遇到一个504超时问题。原因是因为接口耗时过长,超过nginx配置的10秒。然后 真枪实弹搞了一次接口性能优化,最后接口从11.3s降为170ms。本文将跟小伙伴们分

[转帖]k8s部署-22-yaml文件怎么写,规则是什么,在k8s中分别有什么含义

https://www.jianshu.com/p/ba5e3d9ecc1e 在前面的文章中,我们使用了较多的yaml文件,例如测试kubespary方式搭建的集群可用性,亦或者前文中我们搭建ingress-nginx的时候也是用了yaml文件,那么k8s中的yaml文件到底该如何来写,针对k8s中

[转帖]zabbix监控进程和监控日志

监控日志:大家可以监控系统日志、nginx、Apache、业务日志。想用好用对,不是辣么容易。zabbix最主要的是监控日志文件中有没有某个字符串的表达式,支持日志文件正则和关键字正则,其是把日志文件中符合关键字的日志过滤出来入库,不包含的日志不采集,且只支持主动模式。 1、 zabbix日志监控表