在Linux系统管理中,进程管理是一项基本而重要的任务。pkill
命令是一个强大的工具,用于根据指定条件发送信号到进程。它提供了一个更灵活和强大的方式来杀死进程,相比传统的 kill
命令,pkill
可以根据进程名、用户、终端等多种属性来匹配进程。
Linux pkill命令介绍
pkill
是 "process kill" 的缩写。它允许用户根据进程的名称、用户、进程组、终端等属性发送信号。这在处理大量相似进程时非常有用,例如批量终止由同一个命令启动的进程。
Linux pkill命令适用的Linux版本
pkill
命令在大多数现代的Linux发行版中都可用。对于早期或者定制化的版本,如果命令不存在,则可能需要安装 procps
或 procps-ng
包。
对于 CentOS 7,使用 YUM 安装:
[linux@bashcommandnotfound.cn ~]$ sudo yum install procps
对于 CentOS 8 或更高版本,使用 DNF 安装:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install procps-ng
其他发行版,如 Ubuntu 或 Debian,可以使用 apt-get:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install procps
Linux pkill命令的基本语法
pkill [options] <pattern>
Linux pkill命令的常用选项或参数说明
选项 | 描述 |
---|---|
-SIG | 发送指定的信号,而不是默认的SIGTERM |
-e | 显示被杀死的进程的信息 |
-f | 使用完整命令行而不仅仅是进程名来匹配 |
-u | 仅匹配指定用户的进程 |
-n | 仅匹配最新启动的进程 |
-o | 仅匹配最早启动的进程 |
-l | 列出所有信号的名称 |
-P | 仅匹配指定父进程ID的进程 |
-g | 仅匹配指定进程组的进程 |
-t | 仅匹配指定终端的进程 |
Linux pkill命令实例详解
实例1:杀死指定名称的进程
[linux@bashcommandnotfound.cn ~]$ pkill nginx
这个命令会发送SIGTERM信号给所有名为“nginx”的进程。
实例2:使用完整命令行匹配进程
[linux@bashcommandnotfound.cn ~]$ pkill -f "/usr/bin/nginx -g 'daemon off;'"
如果nginx以某种特定的命令行参数运行,使用 -f
选项可以根据完整的命令行匹配并杀死进程。
实例3:杀死指定用户的进程
[linux@bashcommandnotfound.cn ~]$ pkill -u bob nginx
这将杀死用户“bob”运行的所有名为“nginx”的进程。
实例4:发送特定信号
[linux@bashcommandnotfound.cn ~]$ pkill -HUP nginx
这将发送HUP信号给所有名为“nginx”的进程,通常用于让进程重新读取其配置文件。
实例5:杀死属于特定进程组的所有进程
[linux@bashcommandnotfound.cn ~]$ pkill -g <process_group_id>
替换 <process_group_id>
为目标进程组ID,这将杀死属于该进程组的所有进程。
实例6:杀死运行在特定终端的进程
[linux@bashcommandnotfound.cn ~]$ pkill -t pts/0
这将杀死所有在伪终端 pts/0
上运行的进程。
实例7:杀死除了特定进程之外的所有进程
[linux@bashcommandnotfound.cn ~]$ pkill -v -f "python my_script.py"
这将杀死所有没有运行“python my_script.py”命令的进程。
实例8:杀死所有除了指定用户之外的用户的进程
[linux@bashcommandnotfound.cn ~]$ pkill -v -u bob
这将杀死所有不是由用户“bob”运行的进程。
实例9:杀死最近启动的匹配进程
[linux@bashcommandnotfound.cn ~]$ pkill -n nginx
如果有多个“nginx”进程,这将只杀死最近启动的那个。
实例10:列出所有可用的信号
[linux@bashcommandnotfound.cn ~]$ pkill -l
这个命令会列出所有系统中可用的信号及其对应编号。
实例11:使用信号名称发送信号
[linux@bashcommandnotfound.cn ~]$ pkill -SIGINT my_app
这将发送 SIGINT
(通常等同于Ctrl+C)信号给所有名为“my_app”的进程。
实例12:忽略大小写匹配进程
[linux@bashcommandnotfound.cn ~]$ pkill -i node
这将匹配“NODE”、“node”、“NoDe”等所有大小写变种的进程名。
实例13:杀死父进程ID为特定值的所有进程
[linux@bashcommandnotfound.cn ~]$ pkill -P <parent_process_id>
替换 <parent_process_id>
为目标父进程ID,这将杀死所有父进程ID匹配的子进程。
实例14:在特定会话ID中杀死所有进程
[linux@bashcommandnotfound.cn ~]$ pkill -s <session_id>
替换 <session_id>
为目标会话ID,这将杀死在该会话下的所有进程。
实例15:发送SIGKILL信号强制杀死进程
[linux@bashcommandnotfound.cn ~]$ pkill -9 my_app
这将发送 SIGKILL
信号给所有名为“my_app”的进程。SIGKILL
是一个强制终止信号,不能被进程忽略。
Linux pkill命令的注意事项
-
在使用
pkill
时要非常小心,以避免意外终止关键系统进程。 -
如果您不确定,可以先使用
pgrep
命令来检查哪些进程会被匹配。 -
一些进程可能需要特定的信号来优雅地关闭,例如
SIGHUP
通常用于让服务重新加载配置,而SIGKILL
用于强制终止。 -
使用
pkill
可能需要相应的权限,普通用户只能终止自己的进程,而超级用户(root)才能终止所有进程。 -
bash: pkill: command not found 如果出现这个错误,根据上述命令安装。
评论区