Linux的命令行提供了很多杀死进程的命令。例如,您可以将PID传递给“kill”命令以杀死进程;“pkill”命令将正则表达式作为输入,因此匹配该模式的进程将被杀死。但是还有一个名为“killall”的命令,它默认与参数名称完全匹配,然后杀死匹配的进程。在本文中,我们将讨论此命令的实际应用。Linux的killall命令killall命令可用于向特定进程发送信号。该信号默认为SIGTERM,但可以使用killall命令的参数指定其他信号。现在让我们通过一些实际示例来了解此命令的运行情况。1.基本示例在这个示例中,我们将使用killall来杀死一个特定的进程。假设有两个起始字符相同的进程:$ps-aef|grep"test"himanshu39692811014:14pts/000:00:00./testhimanshu39702811014:14pts/000:00:00./test_again如何杀死“test_again”加工毛呢布?$killalltest_again[2]+Terminated./test_again如您所见,killall命令终止了“test_again”进程。您可以使用ps命令确认这一事实:$ps-aef|grep"test"himanshu39692811014:14pts/000:00:00./test您可以观察到“test_again”没有显示,因为它已被杀死。2.使用-I选项忽略大小写默认情况下,killall命令是区分大小写的。例如:$ps-aef|grep"test"himanshu41773161014:54pts/300:00:00./testhimanshu41783161014:54pts/300:00:00./test_againhimanshu41803161014:54pts/300:00:00grep--color=autotestTEST$:killallnoprocessfound可以看到killall命令找不到名为“TEST”的进程,但是“test”进程确实在运行。要使killall命令忽略大小写,您可以使用-I选项(大写i)。例如:$killall-ITEST[1]-Terminated./test您可以观察到您现在已经成功终止了“测试”进程。3.使用-i选项以交互方式终止进程。killall命令可用于终止多个进程。$killalltesttest_again[2]-Terminated./test_again[3]+Terminated./test不过,如果你想让killall交互终止进程,可以使用-i选项。这是示例:$killall-itesttest_againKilltest(4201)?(y/N)yKilltest_again(4202)?(y/N)y[1]-Terminated./test[2]+Terminated./test_again你可以看到这样,当同时终止多个进程时,用户可以控制是否终止某个进程。4、使用-q选项关闭命令执行回显。有时killall找不到指定的进程时,会输出类似如下的错误信息。$killallTESTTEST:noprocessfound但是,当您希望killall安静地执行时,可以使用-q选项:$killall-qTEST$如您所见,使用-q选项后,killall命令的输出被抑制。5.使用-l选项列出所有支持的信号(signal)如前所述,killall向进程发送信号。您可以使用-s选项(后跟信号名称)向进程发送特殊信号。要知道可以发送的所有信号,您可以使用-l选项(小写L)得到:看着这些信号的名字,你可能会在心里疑惑:这些信号是干什么用的?译者注:使用以下命令获取所有信号的描述:$man7signal我需要和你讨论一件事killall命令的man说:如果进程名的长度小于等于15,它会默认匹配全名。例如,假设有两个名称很长的进程:$ps-aef|grep"test"himanshu40213161014:27pts/300:00:00./test_abcdefghijhimanshu40353161014:27pts/300:00:00./test_abcdefgh第一个进程的名称process有15个字符。现在,让我们尝试使用killall终止进程:$killalltest_abcdefghij[1]-Terminated./test_abcdefghij如您所见,killall命令成功终止了进程。如果两个进程的名称都超过15个字符,根据man,killall将杀死两个进程。例如:$ps-aef|grep“test”himanshu41143161014:40pts/300:00:00./test_abcdefghijklmnopqrstuvwxhimanshu41413161014:46pts/300:00:00./test_abcdefghijklmnopqrstuvwxyzhimanshu41433161014:46pts/300:00:00grep--color=autotest你可以观察发现两个进程名都超过了15个字符。现在,当我尝试使用killall:$killalltest_abcdefghijklmnopqrstuvwxyz[6]+Terminated./test_abcdefghijklmnopqrstuvwxyz终止第二个进程时,它只会终止指定的进程,而不会终止另一个进程。$ps-aef|grep"test"himanshu41143161014:40pts/300:00:00./test_abcdefghijklmnopqrstuvwxhimanshu41463161014:47pts/300:00:00grep--color=autotest我不确定,我的尝试有问题??,或者是这个killall中的错误。如果您在评论中写出意见,我会很感激。.有关这些问题的更多信息,请参阅名为COPYING的文件。via:http://linoxide.com/linux-command/linux-killall-my-options/译者:intermerlin校对:wxy
