当前位置: 首页 > Linux

Linux下使用killall命令终止进程的8种方法

时间:2023-04-06 02:16:36 Linux

Linux的命令行提供了很多杀死进程的命令。例如,您可以将PID传递给kill命令以杀死进程;pkill命令将正则表达式作为输入,因此匹配该模式的进程将被终止。但是还有一个名为killall的命令,默认情况下它会与参数名称完全匹配,然后杀死匹配的进程。在本文中,我们将讨论此命令的实际应用。默认情况下,killall命令会向一个/一组进程发送一个SIGTERM信号,但是,也可以通过参数发送一个指定的信号。下面通过实例详细介绍killall的8大用途。1.基本使用如果我们有3个进程在运行,分别是hello1,hello2,hello3,现在我们要killhello1进程,可以直接使用以下方法:killallhello1运行结果如下:[alvin@VM_0_16_centostest]$ps辅助|grephelloalvin120610.00.04152344pts/0S14:410:00./hello1alvin120740.00.04152344pts/0S14:410:00./hello2alvin120840.00.04152:/0pts14152:/0pts:00./hello3alvin120890.00.0112648964pts/0R+14:410:00grep--color=autohello[alvin@VM_0_16_centos测试]$killallhello1[1]终止./hello1[alvin@VM_0_16_centos测试]$ps辅助|grephelloalvin120740.00.04152344pts/0S14:410:00./hello2alvin120840.00.04152340pts/0S14:410:00./hello3alvin121700.00.0pts/912:4R2:00grep--color=autohello可以看到hello1进程已经被kill掉了。对于剩下的hello2和hello3进程,我们想一次性杀掉,也就是批量杀掉进程,如下:[alvin@VM_0_16_centostest]$killallhello*hello:noprocessfoundhello1:noprocessfoundhello.c:noprocessfound[2]-Terminated./hello2[3]+Terminated./hello3这样会杀死所有以hello开头的进程。2.终止某个用户运行的进程我们可以杀死一组满足某个正则表达式的进程,同样,我们也可以杀死某个用户运行的所有进程。例如,用户harry当前正在运行以下进程:[alvin@VM_0_16_centostest]$psaux|grep哈里根13675??0.00.21482365584?Ss14:550:00sshd:harry[priv]harry136770.00.11482362944?S14:550:00sshd:harry@pts/1root136780.00.21482365444?Ss14:550:00sshd:harry[priv]harry136800.00.11482362252?nottyharry136810.00.1532282168?Ss14:550:00/usr/libexec/openssh/sftp-serverharry136940.00.11164363252pts/1Ss+14:550:00-bashharry139480.0pts/1ts2.0314:570:00./hello1harry139520.00.04152344pts/1Spts/0R+14:580:00grep--color=autoharry现在我们要杀死所有由harry运行的进程,我们可以通过以下方式来完成:killall-uharry运行结果如下:[alvin@VM_0_16_centostest]$sudokillall-uharry[alvin@VM_0_16_centos测试]$psaux|grepharryalvin140400.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_centos测试]$killall-IHELLO1[1]终止./hello15。关闭命令执行echo默认情况下,killall会告诉你命令的执行情况,但是如果我们不关心它的执行结果,只想让它默默执行,怎么办?只需添加-q选项即可,其中q表示相当,如下:[alvin@VM_0_16_centostest]$killallHELLO2HELLO2:noprocessfound[alvin@VM_0_16_centostest]$killall-qHELLO2[alvin@VM_0_16_centostest]$6。列出所有支持的信号前面说到killall命令默认会发送SIGTERM信号,那么安能不能发送其他信号呢?当然有可能。可以使用-l选项查看killall支持的所有信号:[alvin@VM_0_16_centostest]$killall-lHUPINTQUITILLTRAPABRTIOTBUSFPEKILLUSR1SEGVUSR2PIPEALRMTERMSTKFLTCHLDCONTSTOPTSTPTTINTTOUURGXCPUXFSZVTALRMPROFWINCHIOPWRSYSUNUSED您可以使用-s选项(后跟信号名称)向进程发送特殊信号。7.交互式操作如果你在杀死多个进程时不放心,担心杀死不该杀的进程,那么你可以使用-i选项,这样你就可以自由决定哪些进程应该被杀掉,哪些进程应该被杀掉。保存。[alvin@VM_0_16_centos测试]$killall-ihello*Killhello2(13825)?(y/N)yKillhello3(13831)?(是/否)Nhello:未找到进程hello1:未找到进程hello3:未找到进程hello.c:未找到进程[2]-已终止./hello28。等待一个进程终止当向一个进程发送信号时,如果要确保进程在返回执行结果之前已经被杀死,可以使用-w选项,其中w代表等待,如下:[alvin@VM_0_16_centostest]$killall-whello1[4]+Terminated./hello1这里好像没什么效果,但是实际执行的时候可以发现执行结果会在一两秒之内如果不加-w选项,会立即显示执行结果。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以和我一起把这本电子书做得更完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站