命令简介

pkill 是一个用于根据进程名称或其他属性来终止进程的命令。与 kill 命令只能通过进程 ID 来终止进程不同,pkill 可以通过进程名称、用户名、命令行等条件来终止进程,使用起来更加方便和灵活。pkill 命令是 Linux 系统管理员常用的进程管理工具之一。

命令格式

1
pkill [options] pattern

其中:

  • pattern: 是要匹配的进程名称或其他属性。

参数说明

参数 说明 备注
-u, –user 只终止指定用户的进程 -
-U, –uid 只终止指定 UID 的进程 -
-G, –group 只终止指定组的进程 -
-g, –gid 只终止指定 GID 的进程 -
-s, –signal 指定发送的信号 默认为 TERM (15)
-l, –list-name 列出可用的信号名称 -
-n, –newest 选择最新启动的进程 -
-o, –oldest 选择最旧启动的进程 -
-c, –count 最多终止指定数量的进程 -
-f, –full 使用全名匹配进程名称 -
-x, –exact 精确匹配进程名称 -
-i, –ignore-case 忽略大小写 -
-t, –tty 只终止连接到指定终端的进程 -
-P, –parent 只终止指定父进程的子进程 -
-v, –verbose 显示详细信息 -
-q, –quiet 禁止输出错误信息 -

命令实例

基础用法

1.终止指定进程名称的进程

1
2
3
4
5
# 终止名称为 apache2 的进程
$ pkill apache2

# 终止名称包含 http 的进程
$ pkill http

2.使用不同的信号终止进程

1
2
3
4
5
# 使用 TERM (15) 信号终止进程
$ pkill -s TERM http

# 使用 KILL (9) 信号强制终止进程
$ pkill -s KILL http

3.列出可用的信号

1
2
3
4
5
6
7
8
$ pkill -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

4.终止指定用户的进程

1
$ pkill -u john

5.终止指定组的进程

1
$ pkill -G www-data

6.终止最新/最旧启动的进程

1
2
$ pkill -n httpd  # 终止最新启动的 httpd 进程
$ pkill -o httpd # 终止最旧启动的 httpd 进程

7.精确匹配进程名称

1
$ pkill -x http  # 只匹配进程名为 http 的进程

8.忽略大小写

1
$ pkill -i HTTP  # 匹配进程名称中包含 HTTP 或 http 的进程

扩展使用方法

1.使用 pgrep 命令列出进程 ID

pgrep 命令可以根据进程名称或其他属性列出进程 ID,然后将其传递给 pkill

1
2
3
4
5
# 终止名称为 apache2 的进程
$ pkill $(pgrep apache2)

# 终止指定用户的进程
$ pkill -u john $(pgrep -u john)

2.限制要终止的进程数量

1
$ pkill -c 3 httpd  # 最多终止 3 个 httpd 进程

3.终止连接到指定终端的进程

1
$ pkill -t pts/0  # 终止连接到 pts/0 终端的进程

4.终止指定父进程的子进程

1
$ pkill -P 1234  # 终止父进程 ID 为 1234 的所有子进程

高级使用方法

1.使用正则表达式匹配进程

pkill 支持使用正则表达式来匹配进程名称。

1
2
$ pkill '^http'  # 匹配以 http 开头的进程
$ pkill 'apache2$' # 匹配以 apache2 结尾的进程

2.使用 pgreppkill 组合命令

pgreppkill 可以结合使用,实现更加灵活和强大的功能。

1
2
3
4
5
# 终止所有占用内存超过 1GB 的进程
$ pgrep -d ',' -u root -a --sort="-,rss" | awk '{if ($2 > 1073741824) print $1}' | xargs pkill

# 终止所有运行时间超过 24 小时的进程
$ pgrep -d ',' -u root -a --sort="-,start_time" | awk '{if ($2 < 86400) print $1}' | xargs pkill

3.使用 pkill 命令监控进程状态

1
2
3
4
5
6
7
8
# 监控 "sshd" 进程的 CPU 使用率
while true; do pkill -f sshd | awk '{print $3}' | sort -n; sleep 1; done

# 输出
0.1
0.2
0.3
...

4.使用 pkill 命令自动重启指定的进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建一个脚本文件名为 "auto_restart.sh"
#!/bin/bash

while true; do
pkill -f nginx
sleep 1
nginx
done

# 运行脚本
nohup ./auto_restart.sh &

# 说明:
# - 该脚本会每隔 1 秒检查一次 "nginx" 进程是否存活
# - 如果 "nginx" 进程不存在,脚本会重新启动它

以上就是关于 pkill 命令的详细介绍和使用示例,希望对你有所帮助。如果还有任何疑问或需要进一步的帮助,欢迎随时提出。