Kill Killall pkill

文章目录

  • Kill Killall pkill
    • 1 kill
      • 1.1 常用功能
      • 1.2 命令格式
      • 1.3 使用实例
        • 1.3.1 列出所有信号名称
        • 1.3.2 得到指定信号的数值
        • 1.3.3 杀死进程
        • 1.3.4 重新加载配置文件
        • 1.3.5 日志分割,重新打开日志文件
        • 1.3.6 平滑升级,在不关闭的情况下升级
        • 1.3.7 彻底杀死进程
    • 2 killall
      • 2.1 命令格式
      • 2.2 killall命令参数
      • 2.3 使用实例
        • 2.3.1 杀死名为mysqld的所有进程
        • 2.3.2 杀死名为mysqld的所有进程,并发送SIGTERM信号
        • 2.3.3 杀死名为myprogram的所有进程,并发送SIGKILL信号
        • 2.3.4 杀死名为mysqld的所有进程,但不杀死名为mysqld2的进程
        • 2.3.5 杀死指定用户所有进程
        • 2.3.6 定时杀死进程
        • 2.3.7 测试进程是否关闭
        • 2.3.8 重新加载进程
        • 2.3.9 关闭一组相关进程
    • 3 pkill命令
      • 3.1 pkill命令格式
      • 3.2 命令参数
      • 3.3 pkill使用场景及实例
        • 3.3.1 杀死所有名为nginx的进程
        • 3.3.2 杀死所有以my开头的进程
        • 3.3.3 杀死用户moonrong的所有进程
        • 3.3.4 杀死所有命令行参数中包含pattern的进程
        • 3.3.5 杀死进程组中的所有进程
        • 3.3.6 杀死最新的5个匹配进程
        • 3.3.7 杀死与指定终端相关的所有进程
    • 4 对比

Kill Killall pkill

1 kill

向指定的进程发送信号,用于终止进程或者修改进程的行为

1.1 常用功能

  • 终止进程
    • 默认发送TERM信号,让进程执行清理操作然后退出
  • 修改进程的行为
    • 使用HUP信号可以重新加载进程的配置文件
    • 使用USR1信号可以让进程执行自定义的操作
  • 查看可用信号
    • kill命令-l选项列出可用的信号

1.2 命令格式

kill [options] 
选项 描述
-s 指定要发送的信号,默认为TERM信号
-l 列出可用的信号
-[signal] 发送指定的信号
-p 打印进程ID号,不发送信号
-a 向所有进程发送信号
-u 向指定用户的所有进程发送信号
-t 向指定终端上的所有进程发送信号
–help 显示帮助信息
–version 显示版本信息
  • kill -9 -u username:向用户名为username的所有进程发送KILL信号。
  • kill -l:列出所有可用的信号。
  • kill -15 1234:向进程ID为1234的进程发送TERM信号。
  • kill -a -s HUP:向所有进程发送HUP信号。

1.3 使用实例

1.3.1 列出所有信号名称

kill -l

0:检查进程是否在运行

15 SIGTERM:表示终止进程的请求信号,通常用于优雅地停止进程
进程可以忽略该信号,但是可以保存进程踪迹和日志信息

9 SIGKILL:表示强制终止进程的信号,不能被阻塞、处理或忽略

3 SIGQUIT:表示终止进程的信号,并且保存相关的日志信息

2 SIGINT:表示中断进程的信号,通常由CTRL+C键生成,用于终止正在运行的进程

1 SIGHUP:表示挂起进程的信号,通常用于重新读取配置文件或重新启动服务

10 SIGUSR1和12 SIGUSR2:表示用户自定义的信号,可以用于进程之间的通信或者进行自定义操作

1.3.2 得到指定信号的数值

kill -l [信号名称]

e.g
kill -l kill --> 9
kill -l SIGKILL --> 9
Kill -l TERM --> 15
kill -l SIGTERM --> 15

1.3.3 杀死进程

kill -3 PID
kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid)

1.3.4 重新加载配置文件

kill -1 PID
kill -s HUP PID

1.3.5 日志分割,重新打开日志文件

kill -USR1 nginx

1.3.6 平滑升级,在不关闭的情况下升级

kill -USR2 PID

1.3.7 彻底杀死进程

先查找到进程pid,然后杀死该进程

ps -ef | grep 进程名
kill -9 进程pid

2 killall

用于杀死指定进程名的所有进程

类似kill命令,但可以一次性杀死所有同名进程

2.1 命令格式

killall [选项] 进程名

2.2 killall命令参数

选项 描述
-e 精确匹配进程名,避免误杀,如果进程名是另一个进程名的子串,那么使用该选项可以确保只杀死该进程名的进程
-g 指定进程组ID,将杀死该进程组中的所有进程
-i 交互式模式,杀死进程前要求用户确认
-q 安静模式,不输出任何信息,只会杀死特定进程
-s 指定信号类型,可以是数字或信号名称,默认情况下,killall命令会向进程发送SIGTERM信号
-u 指定用户名,将杀死该用户所有进程

2.3 使用实例

2.3.1 杀死名为mysqld的所有进程

killall mysqld
killall -3 nginx
killall -s QUIT nginx
##可能会误删

2.3.2 杀死名为mysqld的所有进程,并发送SIGTERM信号

killall -s SIGTERM mysqld

2.3.3 杀死名为myprogram的所有进程,并发送SIGKILL信号

killall -s SIGKILL myprogram

2.3.4 杀死名为mysqld的所有进程,但不杀死名为mysqld2的进程

killall -e mysqld

2.3.5 杀死指定用户所有进程

killall -u 用户名

2.3.6 定时杀死进程

例如定时清理系统缓存或定时重启某个服务
可以使用定时任务结合killall实现

每天凌晨3点定时重启名为mysqld的服务
crontab -e
0 3 * * * killall -9 mysqld

2.3.7 测试进程是否关闭

killall -0 nginx
echo $?

2.3.8 重新加载进程

killall -1 nginx
killall -s HUP nginx

2.3.9 关闭一组相关进程

例如要关闭所有名为mysql和apache的进程
killall mysql apache
  1. 有时候某个应用程序可能会启动多个进程,如果想要关闭所有这些进程,可以使用killall命令
  2. 如果某个进程崩溃了并且无法正常关闭,可以使用killall命令来杀死该进程
  3. 如果想要关闭某个用户的所有进程,可以使用killall命令
  4. 有时候多个进程可能是相互关联的,例如数据库服务和Web服务器,如果想要同时关闭它们,可以使用killall命令
  5. 有时候需要定时杀死某个进程,例如定时清理系统缓存或定时重启某个服务,可以使用定时任务结合killall命令来实现

3 pkill命令

通过进程名或其他属性来查找并杀死进程

3.1 pkill命令格式

pkill [选项] 模式

3.2 命令参数

参数 描述
-f 匹配进程的整个命令行参数
-u 根据指定的用户ID或用户名查找进程
-t 根据指定的终端号查找进程
-x 仅匹配与指定名称完全相同的进程
-n 仅杀死最新的n个匹配的进程
-e 仅杀死和当前用户相关的进程
-p 杀死指定进程的父进程
-g 杀死指定进程组中的所有进程

3.3 pkill使用场景及实例

3.3.1 杀死所有名为nginx的进程

pkill nginx

3.3.2 杀死所有以my开头的进程

pkill '^my'

3.3.3 杀死用户moonrong的所有进程

pkill -u moonrong

3.3.4 杀死所有命令行参数中包含pattern的进程

pkill -f pattern

3.3.5 杀死进程组中的所有进程

pkill -g pgid

3.3.6 杀死最新的5个匹配进程

pkill -n 5 pattern

3.3.7 杀死与指定终端相关的所有进程

pkill -t pts/0

4 对比

命令 描述 优点 缺点
kill 根据PID杀死 简单 手动查找进程PID
killall 根据进程名杀死所有进程 可以杀死多个进程 会误杀
pkill 根据进程名或其他属性杀死进程 根据多种属性杀死进程 需要root权限

kill命令适用于知道要杀死的进程 PID

killall命令适用于需要杀死多个同名进程时

pkill命令适用于根据不同属性杀死

你可能感兴趣的:(Linux,linux,服务器)