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

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

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

目 录CONTENT

文章目录

Linux pkill命令教程:如何更灵活的杀死进程(附案例详解和注意事项)

在Linux系统管理中,进程管理是一项基本而重要的任务。pkill 命令是一个强大的工具,用于根据指定条件发送信号到进程。它提供了一个更灵活和强大的方式来杀死进程,相比传统的 kill 命令,pkill 可以根据进程名、用户、终端等多种属性来匹配进程。

Linux pkill命令介绍

pkill 是 "process kill" 的缩写。它允许用户根据进程的名称、用户、进程组、终端等属性发送信号。这在处理大量相似进程时非常有用,例如批量终止由同一个命令启动的进程。

Linux pkill命令适用的Linux版本

pkill 命令在大多数现代的Linux发行版中都可用。对于早期或者定制化的版本,如果命令不存在,则可能需要安装 procpsprocps-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 如果出现这个错误,根据上述命令安装。

0

评论区