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。

延伸閱讀