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

news/2024/10/22 8:19:26/

在这里插入图片描述

一、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 9ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9kill -s 9 `pgrep mysql`
    

http://www.ppmy.cn/news/32421.html

相关文章

08从零开始学Java之记事本怎么编写Java代码?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者前言在上一篇文章中,壹哥给大家介绍了Java中的标识符及其命名规则、规范,Java里的关键字和保留字&#xff0…

Java多线程系列--synchronized的原理

原文网址:Java多线程系列--synchronized的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java的synchronized的原理。 反编译出字节码 Test.java public class Test {private static Object LOCK new Object();public static int main(String[] args) {synchro…

C++并发编程之五 高级线程管理

文章目录5.1.1 线程池5.1.1 线程池 在前面我们引入了线程的通信和同步手段,那么为什么还要引入线程池呢? 线程池是一种管理多个线程的技术,它可以减少线程的创建和销毁的开销,提高并发性能。线程池中有一定数量的空闲线程&#x…

关于我拒绝了腾讯测试开发岗offer这件事

2022年刚开始有了向要跳槽的想法,之前的公司不能算大厂但在重庆也算是数一数二。开始跳槽的的时候我其实挺犹豫的 其实说是有跳槽的想法在2022年过年的时候就有了,因为每年公司3月会有涨薪的机会,所以想着看看那能不能涨(其实还是…

P1078 [NOIP2012 普及组] 文化之旅 Floyd

题目描述有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不同的国家可能有相同的文化。不同文…

Java实现调用第三方相关接口(附详细思路)

目录1.0.简单版2.0.升级版2-1.call.timeout()怎么传入新的超时值2-2.timeout(10, TimeUnit.SECONDS)两个参数的意思,具体含义3.0.进阶版3-1.java.net.SocketTimeoutException: 超时如何解决4.0.终极版1.0.简单版 以下是一个使用 Java 实际请求“第三方”的简单示例代…

有什么比较好的bug管理工具?5款热门工具推荐

工具再优秀,适合自己才最重要。 为尽量讲透这个问题,本文的行文结构我先整理如下: 1、为什么需要bug管理工具? 2、好的bug管理工具的标准是什么? 3、好的bug管理工具推荐(5款) 4、如何挑选适合…

【分享】用友U8无需代码连接钉钉宜搭的方法

用友U8用户使用场景: 企业使用用友U8快速整合记账管理、报账统计工作,每当用友U8有新的单据时,还需财务人员查询单据详情,并同步到钉钉宜搭表单中进行汇总,便于相关负责人查看。但人工手动同步数据不仅费时费力且易出错…