Linux的命令行提供了很多杀死进程的命令。例如,您可以将PID传递给kill命令以杀死进程;pkill命令将正则表达式作为输入,因此匹配该模式的进程将被终止。但是还有一个名为killall的命令,默认情况下它会与参数名称完全匹配,然后杀死匹配的进程。在本文中,我们将讨论此命令的实际应用。默认情况下,killall命令会向一个/一组进程发送一个SIGTERM信号,但是,也可以通过参数发送一个指定的信号。下面通过实例详细介绍killall的8大用途。1.基本使用如果我们有三个进程在运行,分别是hello1,hello2,hello3,现在我们想kill掉hello1进程,可以直接使用如下方法:killallhello1运行结果如下:[alvin@VM_0_16_centostest]$psaux|grephelloalvin120610。00.04152344pts/0S14:410:00./hello1alvin120740.00.04152344pts/0S14:410:00./hello2alvin120840.00.04152340pts/0S14:410:00./hello3alvin120890.00.0112648964pts/0R+14:410:00grep--color=autohello[alvin@VM_0_16_centostest]$killallhello1[1]Terminated./hello1[alvin@VM_0_16_centostest]$psaux|grephelloalvin120740.00.04152344pts/0S14:410:00./hello2alvin120840.00.04152340pts/0S14:410:00./hello3alvin121700.00.0112648964pts/0R+14:420:00grep--color=autohello可以看到hello1进程已经被kill掉了。对于剩下的hello2和hello3进程,我们希望一次性杀掉,也就是批量杀掉进程,如下:[alvin@VM_0_16_centostest]$killallhello*hello:noprocessfoundhello1:noprocessfoundhello.c:noprocessfound[2]-终止。/hello2[3]+Terminated./hello3因此,所有以hello开头的进程都将被终止。2.终止某个用户运行的进程我们可以杀死一组满足某个正则表达式的进程。同样,我们也可以杀掉某个用户运行的所有进程。例如,用户harry当前正在运行以下进程:[alvin@VM_0_16_centostest]$psaux|grepharyroot136750.00.21482365584?ss14:550:00sshd:harry[priv]harry136770.00.11482362944?S14:550:00sshd:harry@3684?:550:00sshd:harry@3680724044root1?Ss14:550:00sshd:harry[priv]harry136800.00.11482362252?S14:550:00sshd:harry@nottyharry136810.00.1532282168?Ss14:550:00/usr/libexec/openssh/sftp-serverharry136940.00.11164363252pts/1Ss+14:550:00-bashharry139480.00.04152344pts/1S14:570:00./hello1harry139520.00.04152344pts/1S14:570:00./hello2harry139590.00.04152344pts/1S14:570:00./hello3alvin140050.00.0112648964pts/0R+14:580:00grep--color=autoharry现在我们要杀掉所有harry正在运行的进程,可以这样操作:killall-uharry运行结果如下:[alvin@VM_0_16_centostest]$sudokillall-uharry[alvin@VM_0_16_centostest]$psaux|grepharyalvin140400.00.0112648964pts/0R+14:580:00grep--color=autoharry然而,这个选项应该与注意,因为它会杀死用户的所有进程,包括终端进程,导致用户直接退出。所以,不想被打败就不要轻易尝试这个选项。3、以时间的方式终止进程如果我们现在运行的程序很多,只想杀掉运行超过5h的进程,那么我们可以使用-o选项,其中o代表older如下:killall-o5h同理,如果要杀死一个执行时间小于4h的进程,可以使用-y选项,其中y代表更年轻,如下:killall-y4h这两个选项也很粗糙并且还会退出终端,所以我暂时不演示。4.忽略大小写。默认情况下,killall命令是区分大小写的,所以如果我们写错了大小写,将无法正确杀死进程。[alvin@VM_0_16_centostest]$killallHELLO1TEST1:noprocessfound如果我们想忽略大小写,我们可以添加-I(大写字母i)选项。[alvin@VM_0_16_centostest]$killall-IHELLO1[1]Terminated./hello15,关闭命令执行echo默认情况下,killall会告诉你命令的执行状态,但是如果我们不关心它的执行结果,我们只是想让它静默执行,怎么办?只需添加-q选项,其中q的意思是quite,如下:[alvin@VM_0_16_centostest]$killallHELLO2HELLO2:noprocessfound[alvin@VM_0_16_centostest]$killall-qHELLO2[alvin@VM_0_16_centostest]$6,如上所示列出所有支持的信号默认killall命令会发送SIGTERM信号,那么Ann可以发送其他信号吗?当然有可能。您可以使用-l选项查看killall支持的所有信号:[alvin@VM_0_16_centostest]$killall-lHUPINTQUITILLTRAPABRTIOTBUSFPEKILLUSR1SEGVUSR2PIPEALRMTERMSTKFLTCHLDCONTSTOPTSPTTTINTTOUURGXCPUXFSZVTALRMPROFWINCHIOPWRSYSUNUSED您可以使用-s选项(后跟特定于信号的信号名称)来发送信号。7.交互式操作如果你在杀死多个进程时不放心,担心杀死不该杀的进程,那么你可以使用-i选项,这样你就可以自由决定哪些进程应该被杀掉,哪些进程应该被杀掉。保存。[alvin@VM_0_16_centostest]$killall-ihello*Killhello2(13825)?(y/N)yKillhello3(13831)?(y/N)Nhello:noprocessfoundhello1:noprocessfoundhello3:noprocessfoundhello.c:noprocessfound[2]-Terminated./hello28,等待一个进程终止当一个信号被发送给一个进程时,如果要确保进程在返回执行结果之前已经被杀死,可以使用-w选项,其中w代表等待,如下:[alvin@VM_0_16_centostest]$killall-whello1[4]+Terminated./hello1这里好像没有什么作用,但是实际执行的时候可以发现一两秒就会出现执行结果。如果不加-w选项,会立即显示执行结果。
