命令功能
kill 向進程發送信號,默認發送 SIGTERM (15) 請求優雅退出。若進程掛起無響應,可升級信號強度。
語法格式
kill [-s signal|-p] [-a] pid ...
kill -l [signal]
常用參數
| 參數 | 說明 |
-s <signal> | 指定發送的信號 (名稱或編號),如 -s SIGKILL 或 -s 9 |
-l | 列出所有信號名稱與編號;kill -l 9 顯示 SIGKILL |
-a | 不限制「當前進程組」,擴大匹配範圍 |
-p | 僅打印目標進程 PID,不發送信號 |
核心信號對照表
| 信號名 | 編號 | 用途 | 可捕獲/忽略 |
| SIGHUP | 1 | 終端掛起/重讀配置 | 是 |
| SIGINT | 2 | 鍵盤中斷 | 是 |
| SIGQUIT | 3 | 鍵盤退出(生成 core) | 是 |
| SIGTERM | 15 | 標準終止 (默認) | 是 |
| SIGKILL | 9 | 強制殺死 (不可捕獲) | 否 |
| SIGSTOP | 19 | 暫停進程 (不可捕獲) | 否 |
| SIGCONT | 18 | 繼續暫停進程 | — |
實戰示例
# 查看所有信號
kill -l
# 優雅重啟 Nginx (發送 SIGHUP)
kill -HUP $(cat /run/nginx.pid)
# 強制殺死僵死進程
kill -9 12345
# 向進程組發送信號 (負 PID)
kill -TERM -1234 # 向 PGID 1234 所有進程發送 TERM
避坑指南
- 濫用 -9:導致文件描述符洩漏、共享內存未釋放、數據庫損壞。
- 忽略進程組:孤兒進程可能持續佔用資源,建議配合
pkill -TERM -P <PPID> 先清理子進程。
- 權限不足:非 root 用戶只能向同 UID 進程發信號。
現代替代工具
pkill / pgrep:按名稱/屬性匹配,更直觀。
killall:按進程名殺死所有實例。
systemctl stop <service>:服務級管理,處理依賴關係。