首页 / 技术分享 /
Linux kill 命令详解及常用脚本集

Linux kill 命令详解及常用脚本集

GPT-4

2026-01-06
7 次浏览
0 条评论

kill 是 Linux 下用来发送信号给进程(process),以实现终止、暂停、唤醒等操作的基础命令行工具。

服务器
linux
kill
进程
分享:

Linux kill 命令最常见用途是结束僵死进程或强制关闭不响应的任务,但它也能发出其他控制信号。本文系统介绍 kill 命令语法、常用信号类型、信号编号、典型用法与进阶技巧。


Kill 命令详解

1. 基本语法

kill [选项] <PID>...
kill -s <信号名> <PID>...
kill -<信号编号或名> <PID>...
  • <PID> 为进程号(Process ID),可由 ps, top, pgrep, ps aux 等命令获取。
  • 可一次对多个进程号发送信号。

2. 常用信号类型与编号

kill 实际是往进程发送一个信号(Signal),让进程做相应响应。不同类型的信号有不同用途。常见信号如下(部分选项举例):

信号名 编号 说明 用途
SIGTERM 15 终止(默认信号),允许进程清理资源后退出 优雅关闭
SIGKILL 9 强制杀死,无条件终止进程,无法捕捉 强行终止
SIGINT 2 中断(等同于 Ctrl+C),要求进程终止 交互式中断
SIGHUP 1 终端挂起,常用于重载配置 重载配置
SIGQUIT 3 退出并生成 core dump 调试/异常退出
SIGSTOP 19 停止(不可被捕捉) 暂停进程
SIGCONT 18 继续已停止的进程 恢复暂停进程
  • 全部信号及含义可查 kill -lman 7 signal

3. 常用操作实例

3.1 结束进程(推荐优雅终止)

kill 12345         # 向 PID 12345 发送 SIGTERM(默认信号)
kill -15 12345     # 显式发送 SIGTERM
kill -s TERM 12345 # 等同于以上,使用信号名

3.2 强制杀死(无法优雅处理)

kill -9 12345      # 向 PID 12345 发送 SIGKILL,强制终止
kill -KILL 12345   # 同上,使用信号名

3.3 挂起/恢复进程

kill -STOP 12345   # 暂停进程
kill -CONT 12345   # 恢复进程

3.4 通知进程重载配置(如 nginx/reload)

kill -HUP 12345    # 通常服务程序会捕捉到 SIGHUP 并重新加载配置

3.5 批量 kill

kill 12345 23456 34567  # 同时给多个进程发送信号

4. 列出可用信号

kill -l            # 显示所有信号名及编号(有些系统可达 64+ 种)

输出示例:

 1) SIGHUP    2) SIGINT    3) SIGQUIT   ... 9) SIGKILL   15) SIGTERM   ...

5. 与其他工具配合使用

5.1 查找进程 PID

  • ps:查单个进程号
    ps aux | grep nginx
  • pgrep:直接按名称获取 PID
    pgrep nginx
  • pkill:按进程名 kill(会给所有匹配进程发送信号)
    pkill -9 nginx

5.2 killall

批量按名字杀死进程:

killall -9 nginx

6. 进阶技巧与注意事项

  • 优先用 kill 默认的 SIGTERM,只有进程无响应再用 SIGKILL。
  • SIGKILL/SIGSTOP 不可被进程捕捉或阻塞,确保进程立即终止/暂停。
  • 作为 root 用户可 kill 任何进程(建议谨慎)。
  • 某些系统关键进程(init/systemd)不能被 kill。
  • kill 你没有权限的进程会报错:-bash: kill: (12345): Operation not permitted
  • 远程 kill 可用 ssh user@host kill ...
  • 杀僵尸进程(Z 状态)通常无效,应杀父进程(PPID)。

7. 常见问题

  • kill 后进程仍在?通常因进程正在处理或处于不可杀状态,可再次 kill -9 强制。
  • kill PID 输入错误无效果或误杀,务必小心查找和确认 PID。
  • kill 关键系统进程可导致系统崩溃。

8. 参考与扩展


9. 速记

  • kill PID:优雅终止
  • kill -9 PID:强制杀死
  • kill -HUP PID:重载配置
  • kill -l:列出信号
  • pgrep/killall/pkill:批量运维

在实际运维过程中,经常需要对一类进程做批量结束、强制杀死或自定义筛选后批量 kill。下面列出几种常用的批处理 kill 脚本,覆盖不同场景,包括按进程名、关键字、特定用户、排除自身等操作,适用 bash/shell 环境。


10. 按名称批量 kill(推荐 pkill/killall)

最简单直接,适合结束所有同名进程。

pkill -9 nginx            # 强制杀死所有 nginx 进程
killall -15 python3       # 优雅结束所有 python3 进程

11. 按关键字筛选并 kill

适合结束含特定参数的进程。ps + grep + awk + xargs 组合:

ps aux | grep 'your-keyword' | grep -v grep | awk '{print $2}' | xargs -r kill -9
  • 替换 your-keyword 为你关心的关键字
  • 可将 -9 换成 -15 优雅关闭

实例:

ps aux | grep 'python my_script.py' | grep -v grep | awk '{print $2}' | xargs -r kill -9

12. 按端口筛选并 kill

结束监听特定端口的程序:

lsof -i :8080 | awk 'NR>1 {print $2}' | xargs -r kill -9
  • 8080为端口号
  • lsof 需 root 权限或允许查看相关进程

13. 按特定用户 kill

只杀指定用户运行的进程(如 www-data):

ps -u www-data -o pid= | xargs -r kill -15

14. 排除自身的批量 kill

有时候 grep 会查到自己的命令行,为防止误杀可这样做:

ps aux | grep your-keyword | grep -v grep | grep -v $$ | awk '{print $2}' | xargs -r kill -9
  • $$ 为当前 shell 的 PID

15. 批量 kill 脚本封装版(支持进程名参数)

保存为 bulk_kill.sh,用法:

chmod +x bulk_kill.sh
./bulk_kill.sh nginx 9          # 强杀所有 nginx
./bulk_kill.sh python3 15       # 优雅结束所有 python3

脚本内容:

#!/bin/bash
if [ $# -lt 1 ]; then
    echo "用法: $0 <进程名> [信号, 默认15]"
    exit 1
fi
PROC_NAME="$1"
SIGNAL="${2:-15}"

PIDS=$(pgrep "$PROC_NAME")
if [ -z "$PIDS" ]; then
    echo "未找到进程 $PROC_NAME"
    exit 0
fi

echo "即将发送信号 $SIGNAL 到进程: $PIDS"
echo "$PIDS" | xargs kill -"$SIGNAL"

16. 批量 kill 前二次确认(防误杀)

添加交互确认:

PIDS=$(pgrep nginx)
if [ -n "$PIDS" ]; then
    echo "以下 nginx 进程将被杀死: $PIDS"
    read -p "确认要杀死这些进程?(y/N): " confirm
    if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
        echo "$PIDS" | xargs kill -9
    else
        echo "操作已取消。"
    fi
fi

17. 杀死所有某类进程并记录日志

PIDS=$(pgrep node)
if [ -n "$PIDS" ]; then
    echo "$(date): kill node $PIDS" >> /var/log/kill_node.log
    echo "$PIDS" | xargs kill -9
fi

18. 常见批量 kill 误区

  • xargs 默认每次可能传递很多 PID,有些系统 kill PID 上限有约束,建议配合 -n 或循环处理大量进程。
  • 进程名可能不唯一,慎重确认(如包含自己 shell/脚本进程)。
  • kill -9 是强制杀死,资源和临时文件有丢失风险,优先用 kill -15。

19. 批量 kill 工具/增强推荐

  • htop / top用法:

    • htop 启动后,使用方向键或 F3 筛选进程,空格选中多个,F9(Kill)选择信号(如 9),回车进行批量 kill。
    • top 中按 k,输入 PID 和信号编号,逐个确认。
    • 适合交互式批量操作和可视筛选。
  • killall/pkill 用法:

    killall -9 nginx         # 所有名为 nginx 的进程发送 SIGKILL(9)
    pkill -f node            # 按命令行全文匹配并 kill,常用于带参数的 node 进程
    pkill -u www-data        # 结束所有 www-data 用户进程
    pkill -n python3         # 只 kill 最新一个 python3 进程
  • 自动化与日志增强 推荐脚本封装 kill 行为并自动记录日志,如:

    #!/bin/bash
    # 保存为 kill_with_log.sh
    PROC="$1"
    SIGNAL="${2:-15}"
    DATE=$(date '+%F %T')
    PIDS=$(pgrep "$PROC")
    if [ -z "$PIDS" ]; then
        echo "[$DATE] 未找到 $PROC 进程" | tee -a /var/log/kill_${PROC}.log
        exit 0
    fi
    echo "[$DATE] kill -$SIGNAL $PROC: $PIDS" | tee -a /var/log/kill_${PROC}.log
    echo "$PIDS" | xargs kill -"$SIGNAL"
  • 多条件复合 结合 pgrep 支持多条件:

    pgrep -f 'python app.py --env=prod' | xargs -r kill -15  # 按参数杀指定 python 应用

评论区 (0)

你需要先 登录 后才能发表评论。
还没有人评论,赶快成为第一个吧。

关于云信益站

云信益站是由荣县人创办的公益网站,集家乡宣传、技术分享与开发服务于一体。在这里,您可以探索荣县的美景、美食与历史,查询实用本地信息,学习软件开发技术。让我们以数字技术连接桑梓,赋能家乡发展。

联系站长

关注我们

© 2025 云信益站. 保留所有权利.