kill [选项] [信号] PID...
kill -l [信号编号]
| 选项 | 说明 |
|---|---|
-s 信号 |
指定要发送的信号(名称或编号) |
-l |
列出所有信号名称 |
-a |
不限制命令名与进程号的对应关系 |
-p |
只打印进程PID,不发送信号 |
--help |
显示帮助信息 |
| 信号编号 | 信号名称 | 说明 | 默认行为 |
|---|---|---|---|
| 1 | SIGHUP | 挂起信号,通常用于重启守护进程 | 终止 |
| 2 | SIGINT | 中断信号(Ctrl+C) | 终止 |
| 3 | SIGQUIT | 退出信号(Ctrl+\) | 终止并生成core文件 |
| 9 | SIGKILL | 强制终止信号,不能被捕获或忽略 | 立即终止 |
| 15 | SIGTERM | 终止信号(kill默认发送的信号) | 终止 |
| 18 | SIGCONT | 继续执行已停止的进程 | 继续 |
| 19 | SIGSTOP | 停止进程,不能被捕获或忽略 | 暂停 |
| 20 | SIGTSTP | 终端停止信号(Ctrl+Z) | 暂停 |
查找进程PID并终止:
# 查找进程
ps aux | grep nginx
# 终止进程(PID为1234)
kill 1234
# 或明确指定信号
kill -15 1234
使用 SIGKILL 信号强制终止无法正常退出的进程:
kill -9 1234
# 或使用信号名称
kill -SIGKILL 1234
许多守护进程会在收到SIGHUP信号后重新加载配置文件:
# 重启nginx
kill -1 $(cat /var/run/nginx.pid)
# 或
pkill -HUP nginx
使用 -l 选项查看所有信号:
kill -l
# 查看特定信号编号对应的名称
kill -l 9
# 查看信号名称对应的编号
kill -l KILL
暂停进程然后恢复执行:
# 暂停进程(发送SIGSTOP)
kill -19 1234
# 恢复进程(发送SIGCONT)
kill -18 1234
同时终止多个进程:
# 终止多个进程
kill 1234 5678 9012
# 终止指定用户的所有进程
pkill -u username
# 或使用killall
killall process_name
平滑重启Nginx而不中断服务:
# 首先检查配置
sudo nginx -t
# 如果配置正确,发送信号重新加载配置
sudo kill -HUP $(cat /var/run/nginx.pid)
# 验证进程状态
ps aux | grep nginx
终止陷入死循环的脚本:
# 查找陷入死循环的脚本进程
ps aux | grep infinite_loop.sh
# 先尝试正常终止
kill 6789
# 如果不行,强制终止
kill -9 6789
在数据库维护中安全终止长时间运行的查询:
# 查找长时间运行的MySQL查询
mysql -e "SHOW PROCESSLIST;"
# 终止特定查询(在MySQL内部)
mysql -e "KILL QUERY 12345;"
# 或者在外部发送SIGTERM
kill $(pgrep -f "mysql.*specific_query")
| 命令 | 功能 | 特点 |
|---|---|---|
kill |
向指定PID发送信号 | 最基础的信号发送命令 |
pkill |
按进程名发送信号 | 无需知道具体PID |
killall |
按进程名发送信号 | 与pkill类似,但选项略有不同 |
skill |
按用户、终端等发送信号 | 较老的命令,建议使用pkill |
xkill |
图形界面终止窗口 | 在X Window系统中使用 |
kill -15 (SIGTERM):告诉进程"请优雅地退出"。进程可以捕获这个信号,进行清理工作(如保存数据、关闭文件等)后再退出。
kill -9 (SIGKILL):立即终止进程,不给进程任何清理的机会。内核直接回收进程资源,可能导致数据丢失或状态不一致。
建议:首先尝试 kill -15,如果进程无响应,再使用 kill -9。
有多种方法查看进程PID:
# 使用ps命令
ps aux | grep 进程名
# 使用pgrep(更简洁)
pgrep 进程名
# 使用pidof
pidof 进程名
# 查看特定进程的PID文件
cat /var/run/nginx.pid
普通用户只能终止自己拥有的进程。要终止其他用户(包括root)的进程,需要root权限:
# 普通用户需要sudo
sudo kill 1234
# 或者以root用户执行
su -c "kill 1234"
这是Linux安全机制的一部分,防止普通用户终止系统关键进程。
僵尸进程(状态为Z)是已经终止但其父进程尚未回收的进程。僵尸进程不能被kill,因为它们已经死了。
解决方法:
kill 父进程PID