命令简介

kill 命令是一个用于发送信号给进程的命令。它可以用来终止、挂起或继续运行进程。在 Linux 系统中,kill 命令是管理进程的重要工具之一,对于系统管理员来说非常有用。

命令格式

1
kill [options] <pid> [...]

其中 :

  • 是要操作的进程 ID。

参数说明

参数 说明 备注
-s, –signal 指定要发送的信号 默认为 TERM (15)
-l, –list 列出可用的信号名称 -
-L, –table 列出可用的信号名称及其说明 -
-a, –all 不区分进程是否属于当前用户,向所有进程发送信号 需要 root 权限
-p, –pid 指定要操作的进程 ID -
-u, –user 终止指定用户的进程 -
-c, –cpuvalue 终止指定 CPU 值的进程 -
-v, –verbose 显示详细信息 -
-q, –quiet 禁止输出错误信息 -
-w, –wait 等待进程终止 -

命令实例

基础用法

1.终止进程

1
2
3
4
5
6
7
8
# 终止单个进程
$ kill 1234

# 终止多个进程
$ kill 1234 5678 9012

# 强制终止 1234 进程
$ kill -9 1234

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

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

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

3.列出可用的信号

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

5.终止指定用户的进程

1
$ kill -u john
  1. 等待进程终止
1
$ kill -w 1234

扩展用法

1.使用 pkill 命令终止进程

pkill 命令可以根据进程名称终止进程,非常方便。

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

# 终止以 http 开头的进程
$ pkill ^http

2.使用 killall 命令终止进程

killall 命令也可以根据进程名称终止进程,但它与 pkill 的工作方式略有不同。

1
2
# 终止名称为 httpd 的进程
$ killall httpd

3.向进程组发送信号

使用 - 可以向进程组发送信号。

1
2
# 向进程组 1234 发送 TERM 信号
$ kill -TERM -- -1234

4.结合 ps 命令查看进程状态

1
2
3
4
5
6
# 查看所有正在运行的 "sshd" 进程
ps aux | grep sshd

# 输出
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1234 0.0 0.1 1024 408 pts/0 S+ 11:23 0:00 sshd -D

5.结合 grep 命令过滤结果

1
2
3
4
5
# 终止所有 CPU 使用率超过 50% 的 "java" 进程
pidof java | grep -E "PID.+CPU.+50.0" | xargs kill

# 或者
ps aux | grep -E "PID.+CPU.+50.0" | grep java | awk '{print $2}' | xargs kill

高级使用方法

1.终止僵尸进程

僵尸进程是一种已经终止但还未被父进程回收的进程。你可以使用 kill 命令向僵尸进程发送 SIGCHLD 信号,以便通知父进程回收资源。

1
2
3
4
5
# 列出所有僵尸进程
$ ps aux | awk 'BEGIN {FS=" "} /zombie/ {print $2}'

# 向僵尸进程发送 SIGCHLD 信号
$ kill -s SIGCHLD <zombie_pid>

2.使用 pgreppkill 组合命令

pgrep 命令可以根据进程名称或其他条件查找进程 ID,然后将其传递给 pkill 命令。这种组合使用方式非常灵活和强大。

1
2
3
4
5
6
7
8
# 终止所有以 http 开头的进程
$ pkill -f ^http

# 终止用户 john 的所有进程
$ pkill -u john

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

3.使用 kill 命令实现进程的软重启

1
2
# 向 "sshd" 进程发送 SIGUSR2 信号,使其重新读取配置文件
kill -s USR2 $(pidof sshd)

4.使用 kill 命令监控进程状态

1
2
3
4
5
6
7
8
9
# 监控 "sshd" 进程的 CPU 使用率并自动重启
while true; do
pid=$(pidof sshd)
cpu=$(ps -p $pid -o %cpu=)
if [ "$cpu" -gt 50 ]; then
kill -s HUP $pid
fi
sleep 1
done

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