Linux 下使用 killall 命令终止进程的 8 大用法
csdh11 2025-01-15 12:07 24 浏览
Linux 的命令行提供很多命令来杀死进程。比如,你可以向 kill 命传递一个PID来杀死进程;pkill 命令使用一个正则表达式作为输入,所以和该模式匹配的进程都被杀死。
但是还有一个命令叫 killall ,默认情况下,它精确地匹配参数名,然后杀死匹配进程。在这篇文章中,我们将讨论有关这个命令的实际应用。
默认情况下,killall 命令将向一个/组进程发送一个 SIGTERM 信号,但是,也可以通过参数发送一个指定的信号。
下面我们通过例子详细介绍 killall 的 8 大用法。
1. 基本用法
假如我们 3 个进程在运行,分别是 hello1, hello2, hello3 ,现在我们想杀死 hello1 进程,可以直接使用如下方式:
killall hello1
运行的结果如下:
[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin 12061 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello1
alvin 12074 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello2
alvin 12084 0.0 0.0 4152 340 pts/0 S 14:41 0:00 ./hello3
alvin 12089 0.0 0.0 112648 964 pts/0 R+ 14:41 0:00 grep --color=auto hello
[alvin@VM_0_16_centos test]$ killall hello1
[1] Terminated ./hello1
[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin 12074 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello2
alvin 12084 0.0 0.0 4152 340 pts/0 S 14:41 0:00 ./hello3
alvin 12170 0.0 0.0 112648 964 pts/0 R+ 14:42 0:00 grep --color=auto hello
可以看到,hello1 进程已经被杀死了。
剩下的 hello2 和 hello3 进程,我们想一次性杀死他们,也就是批量杀死进程,可以如下操作:
[alvin@VM_0_16_centos test]$ killall hello*
hello: no process found
hello1: no process found
hello.c: no process found
[2]- Terminated ./hello2
[3]+ Terminated ./hello3
如此,以 hello 开头的进程全部被干掉。
2. 终止某个用户所运行的进程
我们可以杀死以满足某个正则表达式的一组进程,同样的,我们也可以杀死某个用户运行的所有进程。
比如,用户 harry 现在运行如下几个进程:
[alvin@VM_0_16_centos test]$ ps aux | grep harry
root 13675 0.0 0.2 148236 5584 ? Ss 14:55 0:00 sshd: harry [priv]
harry 13677 0.0 0.1 148236 2944 ? S 14:55 0:00 sshd: harry@pts/1
root 13678 0.0 0.2 148236 5444 ? Ss 14:55 0:00 sshd: harry [priv]
harry 13680 0.0 0.1 148236 2252 ? S 14:55 0:00 sshd: harry@notty
harry 13681 0.0 0.1 53228 2168 ? Ss 14:55 0:00 /usr/libexec/openssh/sftp-server
harry 13694 0.0 0.1 116436 3252 pts/1 Ss+ 14:55 0:00 -bash
harry 13948 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello1
harry 13952 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello2
harry 13959 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello3
alvin 14005 0.0 0.0 112648 964 pts/0 R+ 14:58 0:00 grep --color=auto harry
我们现在想杀死 harry 所运行的所有进程,可以以如下方式操作:
killall -u harry
运行结果如下:
[alvin@VM_0_16_centos test]$ sudo killall -u harry
[alvin@VM_0_16_centos test]$ ps aux | grep harry
alvin 14040 0.0 0.0 112648 964 pts/0 R+ 14:58 0:00 grep --color=auto harry
但是,这个选项要慎用,因为它会把该用户所有进程,包括终端进程,全部杀死,将导致该用户直接退出。所以,如果不想挨揍的话不要轻意尝试这个选项。
3. 终于时间的方式终止进程
假如我们现在运行了很多程序,我们只想杀死运行时间超过 5h 的进程,那么可以使用 -o 选项,其中 o 代表 older 如下:
killall -o 5h
同样地,如果你想杀死进行时间小于 4h 的进程,那么可以使用 -y 选项,其中 y 代表 younger ,如下:
killall -y 4h
这两个选项同样非常粗暴,也会把终端退出,所以先不演示了。
4. 忽略大小写
默认情况下,killall 命令是大小写敏感的,所以我们如果写错大小写,将无法正确杀死进程。
[alvin@VM_0_16_centos test]$ killall HELLO1
TEST1: no process found
如果我们想忽略大小写,可以加上 -I (大写字母 i )选项。
[alvin@VM_0_16_centos test]$ killall -I HELLO1
[1] Terminated ./hello1
5. 关闭命令执行回显
默认情况下,killall 会告诉你命令执行情况,但是,我们如果不关心它的执行结果,只想让它静默执行,该怎么办?只需加上 -q 选项即可,其中 q 表示 quite , 如下:
[alvin@VM_0_16_centos test]$ killall HELLO2
HELLO2: no process found
[alvin@VM_0_16_centos test]$ killall -q HELLO2
[alvin@VM_0_16_centos test]$
6. 列出所有支持的信号
如前文所述,默认情况下,killall 命令将发送 SIGTERM 信号,那么,安可以发送其它信号吗?当然是可以的。可以使用 -l 选项查看 killall 所支持的所有信号:
[alvin@VM_0_16_centos test]$ killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
你可以使用 -s 选项(后面跟一个信号名)来向一个进程发送特殊信号。
7. 交互式操作
如果你在杀死多个进程时不太放心,担心把不该杀死的进程给杀死了,那么你可以使用 -i 选项,这样就可以自由决定哪些进程应该被杀死,哪些进程应该被保留。
[alvin@VM_0_16_centos test]$ killall -i hello*
Kill hello2(13825) ? (y/N) y
Kill hello3(13831) ? (y/N) N
hello: no process found
hello1: no process found
hello3: no process found
hello.c: no process found
[2]- Terminated ./hello2
8. 等待直到某个进程被终止
当一个信号被发送至某个进程,如果你想确定该进程已经被杀死了才返回执行结果,可以使用 -w 选项,其中 w 代表 wait ,如下:
[alvin@VM_0_16_centos test]$ killall -w hello1
[4]+ Terminated ./hello1
这里好像看不出什么效果,但实际执行的时候,可以发现执行结果会在一两秒后出现,而不加 -w 选项的话,执行结果马上就显示。
- 上一篇:系统运行shell命令时,忘记nohup了,怎么办?
- 下一篇:删除tcp占用端口
相关推荐
- 探索Java项目中日志系统最佳实践:从入门到精通
-
探索Java项目中日志系统最佳实践:从入门到精通在现代软件开发中,日志系统如同一位默默无闻却至关重要的管家,它记录了程序运行中的各种事件,为我们排查问题、监控性能和优化系统提供了宝贵的依据。在Java...
- 用了这么多年的java日志框架,你真的弄懂了吗?
-
在项目开发过程中,有一个必不可少的环节就是记录日志,相信只要是个程序员都用过,可是咱们自问下,用了这么多年的日志框架,你确定自己真弄懂了日志框架的来龙去脉嘛?下面笔者就详细聊聊java中常用日志框架的...
- 物理老师教你学Java语言(中篇)(物理专业学编程)
-
第四章物质的基本结构——类与对象...
- 一文搞定!Spring Boot3 定时任务操作全攻略
-
各位互联网大厂的后端开发小伙伴们,在使用SpringBoot3开发项目时,你是否遇到过定时任务实现的难题呢?比如任务调度时间不准确,代码报错却找不到方向,是不是特别头疼?如今,随着互联网业务规模...
- 你还不懂java的日志系统吗 ?(java的日志类)
-
一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...
- 谈谈枚举的新用法--java(java枚举的作用与好处)
-
问题的由来前段时间改游戏buff功能,干了一件愚蠢的事情,那就是把枚举和运算集合在一起,然后运行一段时间后buff就出现各种问题,我当时懵逼了!事情是这样的,做过游戏的都知道,buff,需要分类型,且...
- 你还不懂java的日志系统吗(javaw 日志)
-
一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...
- Java 8之后的那些新特性(三):Java System Logger
-
去年12月份log4j日志框架的一个漏洞,给Java整个行业造成了非常大的影响。这个事情也顺带把log4j这个日志框架推到了争议的最前线。在Java领域,log4j可能相对比较流行。而在log4j之外...
- Java开发中的日志管理:让程序“开口说话”
-
Java开发中的日志管理:让程序“开口说话”日志是程序员的朋友,也是程序的“嘴巴”。它能让程序在运行过程中“开口说话”,告诉我们它的状态、行为以及遇到的问题。在Java开发中,良好的日志管理不仅能帮助...
- OS X 效率启动器 Alfred 详解与使用技巧
-
问:为什么要在Mac上使用效率启动器类应用?答:在非特殊专业用户的环境下,(每天)用户一般可以在系统中进行上百次操作,可以是点击,也可以是拖拽,但这些只是过程,而我们的真正目的是想获得结果,也就是...
- Java中 高级的异常处理(java中异常处理的两种方式)
-
介绍异常处理是软件开发的一个关键方面,尤其是在Java中,这种语言以其稳健性和平台独立性而闻名。正确的异常处理不仅可以防止应用程序崩溃,还有助于调试并向用户提供有意义的反馈。...
- 【性能调优】全方位教你定位慢SQL,方法介绍下!
-
1.使用数据库自带工具...
- 全面了解mysql锁机制(InnoDB)与问题排查
-
MySQL/InnoDB的加锁,一直是一个常见的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?下面是不同锁等级的区别表级锁:开销小,加锁快;不会出现死锁;锁定粒度...
- 看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法
-
一、什么是死锁加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获...
- 一周热门
- 最近发表
- 标签列表
-
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- parsevideo (33)
- 个人网站源码 (37)
- centos7.4下载 (33)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- jdk1.8.0_191下载 (33)
- axure9注册码 (33)
- pts/1 (33)
- spire.pdf 破解版 (35)
- shiro jwt (35)
- sklearn中文手册pdf (35)
- itextsharp使用手册 (33)
- 凯立德2012夏季版懒人包 (34)
- 反恐24小时电话铃声 (33)
- 冒险岛代码查询器 (34)
- 128*128png图片 (34)
- jdk1.8.0_131下载 (34)