Linux命令pkill

本文介绍如何在Kubernetes环境中利用pkill命令与SIGHUP信号来通知Nginx重新加载配置文件,适用于不同容器间的进程操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

最近在项目中有这样的需求:在nginx的配置文件发生变化时,需要通知nginx重新加载配置文件,保证nginx服务是最新的配置。

方案

  1. 使用nginx本身命令实现nginx的重启:nginx -s reload。
  2. 使用Linux的命令给nginx进程发送通知:pkill -SIGHUP nginx。

方案选择

由于nginx和重启nginx的服务不在同一台机器上(准备说是同一个pod的不同容器中,部署在docker上),所以两个容器的进程是不可见的,所以执行 nginx -s reload 会出现 nginx 命令找不到的情况。所以这里我们选择方案2,但这里也有一个问题,因为两个容器相互之前进程是不可见的, pkill -SIGHUP nginx 命令会找不到 nginx 进程,这里我们利用 k8s 的特性,即进程命名空间共享(shareProcessNamespace设置为true),处于同一个 pod 的不同容器之间的进程也是可见的。这里不是我们的重点,对此感兴趣的,可以去研究下 k8s 的相关特性。

pkill命令

pkill 命令通过进程名称发起对进程的操作。上面的 pkill -SIGHUP nginx 命令,即给 nignx 进程发送 SIGHUP 信号。跟 kill 命令和 killall 命令有相似之处,不同的地方在于:

  1. kill 命令通过进程 id 发起对进程的操作,如 kill -9 pid,停止 pid进程。因为需要进程 id,所以经常配合着 ps 命令,如 ps -ef|grep nginx,可以得到 nginx 进程的 pid。
  2. killall 命令也是通过进程名杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程。跟 pkill 命令效果是一样的,所以 killall 和 pkill 都可以选择。

格式

pkill [选项] [参数]

选项

选项

说明

--help

显示帮助文档

--version

显示命令版本

-f

查找完成的文件名

-g pgrp

只匹配列出的进程组ID中的进程。进程组0被转换为pgrep或pkill自己的进程组。

-G gid

只匹配实际组ID列出的进程。可以使用数值或符号值。

-n

选择最近执行的进程

-o

选择最早的进程

-P ppid

选择父pid匹配的进程

-s sid

只匹配进程会话ID列出的进程。会话ID 0被转换为pgrep或pkill自己的会话ID。

-t term

查找符合终端号的进程

-u euid

只匹配其有效用户ID列出的进程。

-U uid

只匹配实际用户ID列出的进程。可以使用数值或符号值。

-v

查找不符合条件的进程

-x

只匹配其名称(如果-f指定了命令行)与模式完全匹配的进程。

-signal

要发送的信号

参数

进程名称,即需要发送通知的进程名称。

使用

pkill -SIGHUP nginx #通知nginx进程重新加载配置

这是 pkill -signal 的用法,即发送信息号。SIGHUP 是多种信号的一种,常用于配置文件重新加载,可以通过 kill -l 命令查看所有 signal 信号。

kill -l
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2

HUP 用数字表示为1,后面的一次累加,如后面的 KILL 为9,所以 pkill -SIGHUP nginx 也可以用 pkilll -1 nginx 表示,两者效果是一样的。而 pkill -9 nginx 命令则会杀死所有 nginx 进程(master进程以及 work 进程)。相关信号很多,有兴趣可同学可深入研究。

总结

pkill 命令的用法还很多,本文只展示了比较常见的用法,除了 -signal,其他选项不是很常用,但应用也比较简单,在实际应用中有类似的场景的可以考虑使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值