当前位置: 首页 > article >正文

【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`
    

http://www.kler.cn/a/791.html

相关文章:

  • ES7+ React/Redux/GraphQL/React-Native snippets 使用指南
  • 基于STM32F103控制L298N驱动两相四线步进电机
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战训练三)
  • JS中若干相似特性的区别
  • 安装openGauss数据库一主一备
  • 谷歌集群数据集:负载均衡云服务测试数据
  • OpenAI GPT-4震撼发布:多模态大模型
  • Floyd算法求解最短路径
  • 道阻且长,未来可期,从GPT-4窥得通用人工智能时代的冰山一角!
  • 总结vue2基础面试
  • 常见的系统架构
  • Java数据结构 - LinkedHashMap 与 LruCache
  • 星戈瑞-Sulfo-Cyanine3 azide?磺酸基-Cy3-N3叠氮基水溶性染料
  • 文心一言---中国版的“ChatGPT”狂飙的机会或许要出现了
  • 【华为机试真题 Python实现】2023年1、2月高频机试题
  • 云原生之docker容器监控详解(cAdvisor、node exporter、prometheus)
  • 解决 IDA 防F5转伪C笔记
  • 站上风口,文心一言任重道远
  • 数字信号处理:滤波、频谱
  • Linux下gdb调试快速入门
  • 怎么避免服务内存溢出?
  • 贯穿设计模式第一话--单一职责原则
  • 【云原生|Docker】01-docker简介
  • 数据结构--二叉树
  • toString()、equals()是什么,为啥需要重写,多种方法来重写
  • Java开发 - 布隆过滤器初体验