Linux下使用killall命令终止进程的8大用法实例详解
Linux的命令行提供很多命令来杀死进程。比如,你可以向kill命传递一个PID来杀死进程;pkill命令使用一个正则表达式作为输入,所以和该模式匹配的进程都被杀死。
但是还有一个命令叫killall,默认情况下,它精确地匹配参数名,然后杀死匹配进程。在这篇文章中,我们将讨论有关这个命令的实际应用。
默认情况下,killall命令将向一个/组进程发送一个SIGTERM信号,但是,也可以通过参数发送一个指定的信号。
下面我们通过例子详细介绍killall的8大用法。
1、基本用法
假如我们3个进程在运行,分别是hello1,hello2,hello3,现在我们想杀死hello1进程,可以直接使用如下方式:
killallhello1
运行的结果如下:
[alvin@VM_0_16_centostest]$psaux|grephello alvin120610.00.04152344pts/0S14:410:00./hello1 alvin120740.00.04152344pts/0S14:410:00./hello2 alvin120840.00.04152340pts/0S14:410:00./hello3 alvin120890.00.0112648964pts/0R+14:410:00grep--color=autohello [alvin@VM_0_16_centostest]$killallhello1 [1]Terminated./hello1 [alvin@VM_0_16_centostest]$psaux|grephello alvin120740.00.04152344pts/0S14:410:00./hello2 alvin120840.00.04152340pts/0S14:410:00./hello3 alvin121700.00.0112648964pts/0R+14:420:00grep--color=autohello
可以看到,hello1进程已经被杀死了。
剩下的hello2和hello3进程,我们想一次性杀死他们,也就是批量杀死进程,可以如下操作:
[alvin@VM_0_16_centostest]$killallhello* hello:noprocessfound hello1:noprocessfound hello.c:noprocessfound [2]-Terminated./hello2 [3]+Terminated./hello3
如此,以hello开头的进程全部被干掉。
2、终止某个用户所运行的进程
我们可以杀死以满足某个正则表达式的一组进程,同样的,我们也可以杀死某个用户运行的所有进程。
比如,用户harry现在运行如下几个进程:
[alvin@VM_0_16_centostest]$psaux|grepharry root136750.00.21482365584?Ss14:550:00sshd:harry[priv] harry136770.00.11482362944?S14:550:00sshd:harry@pts/1 root136780.00.21482365444?Ss14:550:00sshd:harry[priv] harry136800.00.11482362252?S14:550:00sshd:harry@notty harry136810.00.1532282168?Ss14:550:00/usr/libexec/openssh/sftp-server harry136940.00.11164363252pts/1Ss+14:550:00-bash harry139480.00.04152344pts/1S14:570:00./hello1 harry139520.00.04152344pts/1S14:570:00./hello2 harry139590.00.04152344pts/1S14:570:00./hello3 alvin140050.00.0112648964pts/0R+14:580:00grep--color=autoharry
我们现在想杀死harry所运行的所有进程,可以以如下方式操作:
killall-uharry
运行结果如下:
[alvin@VM_0_16_centostest]$sudokillall-uharry [alvin@VM_0_16_centostest]$psaux|grepharry alvin140400.00.0112648964pts/0R+14:580:00grep--color=autoharry
但是,这个选项要慎用,因为它会把该用户所有进程,包括终端进程,全部杀死,将导致该用户直接退出。所以,如果不想挨揍的话不要轻意尝试这个选项。
3、终于时间的方式终止进程
假如我们现在运行了很多程序,我们只想杀死运行时间超过5h的进程,那么可以使用-o选项,其中o代表older如下:
killall-o5h
同样地,如果你想杀死进行时间小于4h的进程,那么可以使用-y选项,其中y代表younger,如下:
killall-y4h
这两个选项同样非常粗暴,也会把终端退出,所以先不演示了。
4、忽略大小写
默认情况下,killall命令是大小写敏感的,所以我们如果写错大小写,将无法正确杀死进程。
[alvin@VM_0_16_centostest]$killallHELLO1 TEST1:noprocessfound
如果我们想忽略大小写,可以加上-I(大写字母i)选项。
[alvin@VM_0_16_centostest]$killall-IHELLO1 [1]Terminated./hello1
5、关闭命令执行回显
默认情况下,killall会告诉你命令执行情况,但是,我们如果不关心它的执行结果,只想让它静默执行,该怎么办?只需加上-q选项即可,其中q表示quite,如下:
[alvin@VM_0_16_centostest]$killallHELLO2 HELLO2:noprocessfound [alvin@VM_0_16_centostest]$killall-qHELLO2 [alvin@VM_0_16_centostest]$
6、列出所有支持的信号
如前文所述,默认情况下,killall命令将发送SIGTERM信号,那么,安可以发送其它信号吗?当然是可以的。可以使用-l选项查看killall所支持的所有信号:
[alvin@VM_0_16_centostest]$killall-l HUPINTQUITILLTRAPABRTIOTBUSFPEKILLUSR1SEGVUSR2PIPEALRMTERM STKFLTCHLDCONTSTOPTSTPTTINTTOUURGXCPUXFSZVTALRMPROFWINCHIOPWRSYS UNUSED
你可以使用-s选项(后面跟一个信号名)来向一个进程发送特殊信号。
7、交互式操作
如果你在杀死多个进程时不太放心,担心把不该杀死的进程给杀死了,那么你可以使用-i选项,这样就可以自由决定哪些进程应该被杀死,哪些进程应该被保留。
[alvin@VM_0_16_centostest]$killall-ihello* Killhello2(13825)?(y/N)y Killhello3(13831)?(y/N)N hello:noprocessfound hello1:noprocessfound hello3:noprocessfound hello.c:noprocessfound [2]-Terminated./hello2
8、等待直到某个进程被终止
当一个信号被发送至某个进程,如果你想确定该进程已经被杀死了才返回执行结果,可以使用-w选项,其中w代表wait,如下:
[alvin@VM_0_16_centostest]$killall-whello1 [4]+Terminated./hello1
这里好像看不出什么效果,但实际执行的时候,可以发现执行结果会在一两秒后出现,而不加-w选项的话,执行结果马上就显示。
总结
以上所述是小编给大家介绍的Linux下使用killall命令终止进程的8大用法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!