kill — 向程序傳送訊號
向程序傳送訊號,通常用於終止不正常的程序。
語法
kill [選項] PID...
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
-9 / -SIGKILL |
強制立即終止,程序無法捕捉或忽略 | kill -9 1234 |
-15 / -SIGTERM |
請求程序正常結束(預設訊號) | kill -15 1234 |
-1 / -SIGHUP |
要求程序重新讀取設定(常用於 daemon) | kill -1 1234 |
-l |
列出所有可用的訊號名稱與編號 | kill -l |
-s 訊號 |
指定訊號名稱 | kill -s SIGTERM 1234 |
使用範例
範例 1:正常終止程序(SIGTERM)
向 PID 1234 傳送 SIGTERM,請求程序自行清理並結束。這是終止程序的標準做法。
$ kill 1234
先找出 PID:ps aux | grep 程序名稱 或 pgrep -l 程序名稱。
範例 2:強制終止程序(SIGKILL)
若程序無法正常結束(被 SIGTERM 後仍存在),使用 -9 強制終止。程序沒有機會清理。
$ kill -9 1234
盡量先用 kill 1234,等幾秒後程序仍存在才用 kill -9。
範例 3:讓 daemon 重新讀取設定(SIGHUP)
許多 daemon(如 nginx、sshd)收到 SIGHUP 後會重新讀取設定檔,而不需要重啟。
$ sudo kill -HUP $(cat /var/run/nginx.pid)
範例 4:依名稱終止程序(pkill)
使用 pkill 依程序名稱傳送訊號,不需先查詢 PID。
$ pkill -f "python server.py"
範例 5:列出所有訊號
使用 -l 列出系統支援的所有訊號編號與名稱。
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
9) SIGKILL 15) SIGTERM 17) SIGCHLD 18) SIGCONT
常見錯誤與排錯
bash: kill: (1) - Operation not permitted
- 原因
- 嘗試終止沒有權限操作的程序(如 PID 1 的 init/systemd)。
- 解法
- 使用 sudo kill,或確認目標 PID 是否為自己有權限操作的程序。
bash: kill: (9999) - No such process
- 原因
- 指定的 PID 不存在或程序已結束。
- 解法
- 用 ps aux | grep 程序名 重新確認當前的 PID。