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下使用killall命令终止进程的8大用法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • linux kill命令详解

    kill 命令的用途 kill 命令很容易让人产生误解,以为它仅仅就是用来杀死进程的.我们来看一下 man page 对它的解释:kill - send a signal to a process. 从官方的解释不难看出,kill 是向进程发送信号的命令.当然我们可以向进程发送一个终止运行的信号,此时的 kill 命令才是名至实归.事实上如果我们不给 kill 命令传递信号参数,它默认传递终止进程运行的信号给进程!这是 kill 命令最主要的用法,也是本文要介绍的内容. 一般情况下,终止一个前台

  • kill命令在Java应用中使用的注意事项小结

    前言 我们都知道,kill在linux系统中是用于杀死进程. kill pid [..] kill命令可将指定的信号发送给相应的进程或工作. kill命令默认使用信号为15,用于结束进程或工作.如果进程或工作忽略此信号,则可以使用信号9,强制杀死进程或作业. 因此,如果确保将进程杀死,可以使用-9参数 kill -9 pid [..] linux 中常见的信号 1   SIGHUP             挂起进程 2   SIGINT               终止进程 3   SIGGQU

  • Linux下使用killall命令终止进程的8大用法实例详解

    Linux 的命令行提供很多命令来杀死进程.比如,你可以向 kill 命传递一个PID来杀死进程:pkill 命令使用一个正则表达式作为输入,所以和该模式匹配的进程都被杀死. 但是还有一个命令叫 killall ,默认情况下,它精确地匹配参数名,然后杀死匹配进程.在这篇文章中,我们将讨论有关这个命令的实际应用. 默认情况下,killall 命令将向一个/组进程发送一个 SIGTERM 信号,但是,也可以通过参数发送一个指定的信号. 下面我们通过例子详细介绍 killall 的 8 大用法. 1.

  • ThinkPHP进程计数类Process用法实例详解

    本文实例讲述了ThinkPHP进程计数类Process用法.分享给大家供大家参考.具体如下: 项目中有一个需求:由于某一后台任务比较占带宽,所以要限制进程数.花了点时间,写了类,目前版本功能比较简单. Process.class.php文件如下: <?php /** * Process * * @package * @version $id$ * @copyright 2005-2011 SUCOP.COM * @author Dijia Huang <huangdijia@gmail.com

  • 在Linux下用 mkdir 命令来创建目录和子目录的用法

    本篇文章介绍了在Linux下用 mkdir 命令来创建目录和子目录的用法,现在我们要学习在 Linux 系统下创建目录.在 Linux 下,我们可以使用 mkdir 命令.Mkdir 是"make directory" 的缩写词. mkdir 是什么呢 Mkdir 是一个用来在 Linux 系统下创建目录的命令.此命令属于内建命令. 运行 mkdir 命令 你可以在你的控制台直接键入 mkdir 来使用它. $ mkdir 默认情况下,不带任何参数运行 mkdir 命令会在当前目录下创

  • Linux tar 命令用法实例详解

    tar 命令可以为linux的文件和目录创建档案.利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案.利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的. 首先要弄清两个概念:打包和压缩.打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 为什么

  • Linux 中(加、减、乘、除)实例详解

     Linux 中(加.减.乘.除)实例详解 实现代码: #!/bin/bash num1=10 num2=2 #两个数相加 add=$[$num1+$num2] echo $num1 + $num2 '=' $add #两个数相减 sub=$[$num1-$num2] echo $num1 - $num2 '=' $sub #两个数相乘 mut=$[$num1*$num2] echo $num1 '*' $num2 '=' $mut #两个数相除 div=$[$num1/$num2] echo

  • Linux下源码包安装Swoole及基本使用操作图文详解

    本文实例讲述了Linux下源码包安装Swoole及基本使用操作.分享给大家供大家参考,具体如下: 下载Swoole PECL扩展源码包:http://pecl.php.net/package/swoole 关于PHP版本依赖选择: 下载好放到/usr/local/src下,解压缩: tar -zxvf swoole-2.2.0.tgz 准备扩展安装编译环境: phpize 查看php-config位置: find / -name php-config 配置:(--with-php-config=

  • Python的进程,线程和协程实例详解

    目录 相关介绍 实验环境 进程 多进程 用进程池对多进程进行操作 线程 使用_thread模块实现 使用threading模块实现 协程 使用asyncio模块实现 总结 相关介绍 Python是一种跨平台的计算机程序设计语言.是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. 例如 实验环境 Python 3.x (面向对象的高级语言) Multiprocessin

  • Android spinner下垃菜单用法实例详解

    本文实例讲述了Android spinner下垃菜单用法.分享给大家供大家参考,具体如下: 一.使用数组作为数据源 1. 在layout布局文件:声明一个TextView控件和一个Spinner控件,代码如下 <Spinner android:id="@+id/Spinner01" android:layout_width="fill_parent" android:layout_height="wrap_content"></

  • JavaScript命令模式原理与用法实例详解

    本文实例讲述了JavaScript命令模式原理与用法.分享给大家供大家参考,具体如下: 第一,命令模式: (1)用于消除调用者和接收者之间直接的耦合的模式,并且可以对(调用这个过程进行留痕操作) (2)真的不要乱用这个模式,以为他使你简单调用写法变得非常的复杂和有些难以理解. (3)你的业务出现了 (回退操作)(重做操作)的需求的时候你就要考虑使用这个模式了. 命令的原理: 一种情况为发出者直接作用于执行者,这样耦合度很高,另外一种情况为,在发出者和执行者之间增加一个用存储命令的命令访问库也即命

  • linux下执行shell命令方法简介

    linux下执行shell命令有两种方法 在当前shell中执行shell命令 在当前shell中产生一个subshell,在subshell中执行shell命令 1.在当前shell中执行shell命令 主要就是在命令行中通过交互方式方式直接输入shell命令,命令行直接执行给出结果.比如这样: 2.在当前shell中产生一个subshell,在subshell中执行shell命令 比如我们把shell写成shell脚本的方式来运行,这个时候会先启动一个subshell来代替当前的shell,

随机推荐