侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux killall命令教程:如何根据进程名来终止进程(附实例详解和注意事项)

Linux killall命令介绍

killall(kill all processes by name)是一个用来根据进程名来终止一个或多个进程的命令。它可以接受多个参数,指定要终止的进程名,也可以使用通配符或正则表达式来匹配进程名。killall命令还可以指定发送给进程的信号,以及其他一些选项,来控制命令的行为。

killall命令是一个非常强大的命令,可以用来管理系统中运行的进程,释放系统资源,或者终止一些不需要的或者出错的进程。但是,使用killall命令也要小心,因为它可能会误杀一些重要的或者无关的进程,导致系统不稳定或者数据丢失。所以,在使用killall命令之前,最好先使用ps或者top等命令来查看系统中的进程情况,确定要终止的进程名,以及合适的信号。

Linux killall命令适用的Linux版本

killall命令是一个标准的Linux命令,它适用于大多数的Linux发行版,如Ubuntu,Debian,Fedora,CentOS等。但是,有些Linux发行版,如Solaris,AIX等,可能没有提供killall命令,或者提供的killall命令的功能和Linux的不一样。例如,Solaris的killall命令是用来终止当前用户的所有进程的,而不是根据进程名来终止进程。所以,在使用killall命令之前,最好先确认你的Linux发行版是否支持killall命令,以及它的功能是否和Linux的一致。

如果你的Linux发行版没有提供killall命令,或者你想要使用最新的版本的killall命令,你可以从psmisc项目的网站上下载killall命令的源代码,然后自己编译和安装。psmisc项目是一个提供一些和进程相关的命令的开源项目,如killall,pstree,fuser等。你可以按照以下的步骤来安装killall命令:

  1. 下载psmisc项目的源代码,你可以从这里下载最新的版本,或者从这里下载指定的版本。
  2. 解压源代码,进入源代码目录,运行./autogen.sh来生成配置文件。
  3. 运行./configure来检查系统的环境和依赖,如果没有问题,会生成一个Makefile文件。
  4. 运行make来编译源代码,如果没有错误,会生成一些可执行文件,其中就包括killall命令。
  5. 运行sudo make install来安装可执行文件到系统的路径中,一般是/usr/local/bin目录。如果你想要指定其他的安装路径,你可以在运行./configure时,加上--prefix=PATH参数,其中PATH是你想要的安装路径。

安装完成后,你就可以使用killall命令了。你可以运行killall --version来查看你安装的killall命令的版本信息,以及它支持的选项和信号。

不同的Linux发行版可能会使用不同的包管理工具来安装和卸载软件,例如,Ubuntu和Debian使用apt,Fedora和CentOS使用yum或者dnf,Arch Linux使用pacman等。如果你想要使用包管理工具来安装或者卸载killall命令,你可以根据你的Linux发行版,选择合适的包管理工具,然后运行相应的命令。例如,如果你使用的是Ubuntu或者Debian,你可以运行以下的命令来安装或者卸载killall命令:

[linux@bashcommandnotfound.cn ~]$ sudo apt update # 更新软件源
[linux@bashcommandnotfound.cn ~]$ sudo apt install psmisc # 安装psmisc包,包含killall命令
[linux@bashcommandnotfound.cn ~]$ sudo apt remove psmisc # 卸载psmisc包,移除killall命令

如果你使用的是Fedora或者CentOS,你可以运行以下的命令来安装或者卸载killall命令:

[linux@bashcommandnotfound.cn ~]$ sudo yum update # 更新软件源
[linux@bashcommandnotfound.cn ~]$ sudo yum install psmisc # 安装psmisc包,包含killall命令
[linux@bashcommandnotfound.cn ~]$ sudo yum remove psmisc # 卸载psmisc包,移除killall命令

如果你使用的是Arch Linux,你可以运行以下的命令来安装或者卸载killall命令:

[linux@bashcommandnotfound.cn ~]$ sudo pacman -Sy # 更新软件源
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S psmisc # 安装psmisc包,包含killall命令
[linux@bashcommandnotfound.cn ~]$ sudo pacman -R psmisc # 卸载psmisc包,移除killall命令

Linux killall命令的基本语法

killall命令的基本语法格式如下:

killall [选项]... [信号] 进程名...

其中,选项是用来控制killall命令的行为的参数,可以有多个,也可以没有。信号是用来指定发送给进程的信号的参数,可以是信号的名称,如SIGTERM,也可以是信号的编号,如15。如果没有指定信号,killall命令默认发送SIGTERM信号,即终止信号,用来请求进程正常退出。进程名是用来指定要终止的进程的名称的参数,可以有一个或多个,也可以使用通配符或者正则表达式来匹配进程名。

Linux killall命令的常用选项或参数说明

killall命令支持很多选项或参数,用来控制命令的行为,例如,是否忽略大小写,是否显示进程信息,是否使用正则表达式,是否交互式确认,等等。这里,我们只介绍一些最常用的选项或参数,如果你想要了解更多的选项或参数,你可以运行man killall或者killall --help来查看killall命令的手册或者帮助信息。

以下是一些常用的选项或参数的说明:

选项或参数说明
-e, --exact只匹配完全相同的进程名,而不是部分匹配。例如,killall -e vim只会终止名为vim的进程,而不会终止名为vimdiff的进程。
-i, --interactive在终止每个进程之前,交互式地询问用户是否确认。用户可以输入y或者Y来确认,或者输入n或者N来取消。
-l, --list列出所有可用的信号名称和编号,然后退出。
-q, --quiet不输出任何信息,除非发生错误。
-r, --regexp使用正则表达式来匹配进程名,而不是通配符。正则表达式的语法遵循POSIX的扩展正则表达式规范。例如,killall -r '^vi.*'会终止所有以vi开头的进程。
-s, --signal指定发送给进程的信号,可以是信号的名称,如SIGKILL,也可以是信号的编号,如9。如果没有指定信号,killall命令默认发送SIGTERM信号。
-u, --user只终止指定用户的进程,而不是所有用户的进程。用户可以是用户名,也可以是用户ID。例如,killall -u bob firefox会终止bob用户的所有firefox进程。
-v, --verbose输出详细的信息,包括进程名,进程ID,信号名,信号编号,以及终止的结果。
-w, --wait等待所有进程终止后再退出,而不是立即退出。如果有些进程不能被终止,killall命令会每隔一秒发送一次信号,直到超时或者成功为止。

Linux killall命令的实例

以下是一些killall命令的实例,你可以通过这些实例来学习如何使用killall命令来终止进程。

实例1:终止名为firefox的进程

如果你想要终止名为firefox的进程,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall firefox

这个命令会发送SIGTERM信号给所有名为firefox的进程,请求它们正常退出。如果你想要强制终止firefox进程,不管它们是否响应SIGTERM信号,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -s SIGKILL firefox

或者

[linux@bashcommandnotfound.cn ~]$ killall -9 firefox

这个命令会发送SIGKILL信号给所有名为firefox的进程,强制它们立即退出,不给它们任何机会保存数据或者清理资源。所以,使用这个命令可能会导致数据丢失或者系统不稳定,只有在其他方法都无效的情况下,才应该使用这个命令。

实例2:终止名为vim的进程,并显示详细信息

如果你想要终止名为vim的进程,并显示详细信息,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -v vim

这个命令会输出类似以下的信息:

[linux@bashcommandnotfound.cn ~]$ killall -v vim
Killed vim(1234) with signal 15
Killed vim(5678) with signal 15

这个信息表示,killall命令发送了SIGTERM信号(信号编号为15)给两个进程,它们的进程ID分别为1234和5678,然后成功终止了它们。

实例3:终止名为java的进程,并交互式地确认

如果你想要终止名为java的进程,并交互式地确认,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -i java

这个命令会输出类似以下的信息:

[linux@bashcommandnotfound.cn ~]$ killall -i java
Kill java(1234)? (y/N) y
Kill java(5678)? (y/N) n

这个信息表示,killall命令询问你是否要终止两个进程,它们的进程ID分别为1234和5678,你可以输入y或者Y来确认,或者输入n或者N来取消。如果你输入y或者Y,killall命令会发送SIGTERM信号给对应的进程,如果你输入n或者N,killall命令会跳过对应的进程,不发送任何信号。

实例4:终止所有以vi开头的进程,并使用正则表达式匹配

如果你想要终止所有以vi开头的进程,并使用正则表达式匹配,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -r '^vi.*'

这个命令会使用正则表达式^vi.*来匹配进程名,然后发送SIGTERM信号给所有匹配的进程。正则表达式的语法遵循POSIX的扩展正则表达式规范,其中,^表示开头,.表示任意字符,*表示零个或多个重复。所以,这个正则表达式表示以vi开头的任意字符串。例如,这个命令会终止名为vim,vi,vimdiff,vino等进程。

实例5:终止bob用户的所有firefox进程

如果你想要终止bob用户的所有firefox进程,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -u bob firefox

这个命令会只终止bob用户的firefox进程,而不会终止其他用户的firefox进程。你可以使用用户名或者用户ID来指定用户,例如,如果bob用户的用户ID为1000,你也可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -u 1000 firefox

实例6:终止名为ssh的进程,并等待所有进程终止后再退出

如果你想要终止名为ssh的进程,并等待所有进程终止后再退出,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -w ssh

这个命令会发送SIGTERM信号给所有名为ssh的进程,然后等待它们终止后再退出。如果有些进程不能被终止,killall命令会每隔一秒发送一次信号,直到超时或者成功为止。你可以使用-v选项来查看终止的过程和结果,例如:

[linux@bashcommandnotfound.cn ~]$ killall -wv ssh
Killed ssh(1234) with signal 15
Killed ssh(5678) with signal 15
Waiting for ssh(9012) to die
Killed ssh(9012) with signal 15

这个信息表示,killall命令发送了SIGTERM信号给三个进程,它们的进程ID分别为1234,5678,9012,然后等待它们终止。其中,前两个进程很快就终止了,而最后一个进程需要等待一段时间才终止。

实例7:列出所有支持的信号

如果你想要列出所有支持的信号名称和编号,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

这个命令会输出所有可用的信号名称和编号,然后退出。你可以根据这个列表,选择合适的信号来发送给进程。

实例8:交互式地终止进程

如果你想要交互式地终止进程,而不是一次性地终止所有匹配的进程,你可以运行以下的命令:

[linux@bashcommandnotfound.cn ~]$ killall -i hello

这个命令会输出类似以下的信息:

[linux@bashcommandnotfound.cn ~]$ killall -i hello
Kill hello(1234)? (y/N) y
Kill hello(5678)? (y/N) n

这个信息表示,killall命令询问你是否要终止两个进程,它们的进程ID分别为1234和5678,你可以输入y或者Y来确认,或者输入n或者N来取消。如果你输入y或者Y,killall命令会发送SIGTERM信号给对应的进程,如果你输入n或者N,killall命令会跳过对应的进程,不发送任何信号。

Linux killall命令的注意事项

在使用killall命令时,有一些注意事项,你需要了解和遵守,以避免一些不必要的麻烦或者错误。

  • 在使用killall命令之前,最好先使用ps或者top等命令来查看系统中的进程情况,确定要终止的进程名,以及合适的信号。如果你不确定进程名或者信号,你可以运行killall -l来查看所有可用的信号名称和编号,或者运行man killall或者killall --help来查看killall命令的手册或者帮助信息。
  • 在使用killall命令时,要小心不要误杀一些重要的或者无关的进程,导致系统不稳定或者数据丢失。例如,如果你运行killall -9 java,你可能会终止一些系统服务或者应用程序,如Tomcat,Eclipse等,这可能会影响系统的正常运行或者造成数据的丢失。所以,在使用killall命令时,要尽量使用精确的进程名,或者使用-e,-u等选项来限制匹配的范围,或者使用-i选项来交互式地确认。
  • 在使用killall命令时,要尽量避免使用SIGKILL信号,除非其他方法都无效。SIGKILL信号是一个强制终止信号,它会立即终止进程,不给进程任何机会保存数据或者清理资源。所以,使用SIGKILL信号可能会导致数据丢失或者系统不稳定,只有在其他方法都无效的情况下,才应该使用SIGKILL信号。一般情况下,使用SIGTERM信号就可以终止大多数的进程。

Linux killall命令的相关命令

0

评论区