【Linux】进程管理之kill、killall、pkill

在这里插入图片描述

一、kill 命令

  Linux 中的 kill 命令用来终止指定的进程的运行,是 Linux 下进程管理的常用命令。通常,终止一个前台进程可以使用 Ctrl+C 键,但是,对于一个后台进程就须用 kill 命令来终止,那就需要先使用 ps、pidof、pstree、top等工具获取进程 PID,然后使用 kill 命令来杀掉该进程。kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。其基本语法命令如下:

kill [参数] [进程id]
参数说明
-l–list如果-l 后面不加任何参数,那就就代表列出所有的信号名字
-a当处理当前进程时,不限制命令名和进程号的对应关系
-p指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s指定发送信号
-u指定用户
-V–version版本信息
-h–help帮助文档

  kill 命令是通过向进程发送指定的信号来结束相应进程的,根据不同的信号,kill 命令可以完成不同的操作。在默认情况下,采用编号为15的TERM信号,TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的 kill 信号,强行“杀掉”该进程。

参数说明
HUP1终端断线
INT2中断,同 Ctrl + C
QUIT3退出
TERM15终止
KILL9强制终止
CONT18继续
STOP19暂停

  Linux 中每个进程的进程的PID是唯一的,可以用于区分不同的进程。kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。我们举几个例子来说明一下 kill 命令:

# 查询java服务的PID
$ pidof java
118754

# 将PID所代表的进程终止掉
$ kill 118754

# 有时系统会提示进程无法被终止,此时可以加参数-9,表示最高级别地强制杀死进程
$ kill -9 118754

注意:

  • kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。
  • 当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。
  • 应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启  动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

二、killall 命令

  Linux 系统中的 killall 命令用于杀死指定名字的进程,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死对应的进程。我们可以使用 kill 命令杀死指定进程 PID 的进程,如果要找到需要杀死的进程,还需要在之前使用 ps 等命令,再配合 grep 来查找进程,而 killall 把这两个过程合二为一,是一个很好用的命令。其基本语法命令如下:

killall [参数] [进程名]
参数说明
-Z–context只杀死拥有scontext 的进程
-e–exact进程需要和名字完全相符
-I–ignore-case忽略进程名的大小写
-g–process-group杀死进程组而不是进程
-i–interactive交互模式,询问是否要杀死某个进程
-l–list列出所有的已知信号名称
-q–quite进程没有结束时,不输出任何信息
-v–verbose报告信号是否成功发送
-u–user显示详细执行过程
-w–wait等待所有的进程都结束
–help显示帮助信息
-V–version显示版本显示
# 杀死所有同名进程
killall nginx
# 强制杀死所有bash进程
killall -9 bash
# 向进程发送指定信号
killall -TERM ngixn
# 向进程发送指定KILL信号
killall -KILL nginx

默认没有需要yum安装

yum -y install psmisc

三、pkill 命令

  pkill 命令和 killall 命令的用法相同,都是通过进程名杀死进程。与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令。kill 命令杀死指定进程 PID,需要配合 ps 使用,而 pkill 直接对进程对名字进行操作,更加方便。

pkill [选项]  进程名称
参数说明
-o仅向找到的最小(起始)进程号发送信
-n仅向找到的最大(结束)进程号发送信号
-P指定父进程号发送信号
-g指定进程组
-t指定开启进程的终端
# 结束 mysql 进程
pkill mysql

# 结束mark,danny用户的所有进程
pkill -u mark,danny

# 使用w命令查询本机已经登录的用户
w

# 强制杀死 mysql 进程
pkill -9 -t mysql

四、拓展命令

如果能看懂下面一系列命令,那么killall 、kill 、pkill三个命令之间的区别你也就了然于胸了。

  1. pgrep命令:专门显示进程的进程号,相当于:

    ps -aux | grep 进程名 | grep -v grep| awk '{print $2}' 
    
  2. pidof命令:pid of xx进程,显示进程的进程号,同上pgrep。

  3. 组合命令的使用:

    pgrep mysql | xargs kill -s 9
    
    ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
    
    kill -s 9 `pgrep mysql`
    
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独泪了无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值