关于linux:Linux-下使用-killall-命令终止进程的-8-大用法

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 选项的话,执行后果马上就显示。


最初,最近很多小伙伴找我要Linux学习路线图,于是我依据本人的教训,利用业余时间熬夜肝了一个月,整顿了一份电子书。无论你是面试还是自我晋升,置信都会对你有帮忙!

收费送给大家,只求大家金指给我点个赞!

电子书 | Linux开发学习路线图

也心愿有小伙伴能退出我,把这份电子书做得更完满!

有播种?心愿老铁们来个三连击,给更多的人看到这篇文章

举荐浏览:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 神器 | 反对搜寻的资源网站

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据