看到 CPU 滿或服務卡住時,先辨識 PID、父子關係、啟動參數與服務管理器。直接 kill -9 只會把程序終止,不會處理它為什麼卡住,也可能留下未完成寫入。
動手前:先送 TERM,讓程序有機會收尾;只有確認無法正常停止、且了解資料風險後才考慮 KILL。受 systemd 或其他 supervisor 管理的服務應從管理器操作。
找出程序
列出所有程序Linux/macOS
ps auxBSD 風格輸出,Linux 與 macOS 欄位可能不同。
Linux 依 CPU 排序GNU/Linux
ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 20只讀取快照,不是持續監看。
Linux 依記憶體排序GNU/Linux
ps -eo pid,user,%mem,rss,etime,cmd --sort=-%mem | head -n 20RSS 單位通常是 KiB。
依名稱找 PIDLinux/macOS
pgrep -af nginxmacOS pgrep 的 -a/-f 支援度依版本而異。
看程序樹Linux
pstree -appstree 可能要另行安裝。
查看特定 PIDLinux/macOS
ps -p 1234 -o pid,ppid,user,etime,%cpu,%mem,command把 1234 換成實際 PID。
持續看 Linux 資源Linux
top按 q 離開;不同 top 實作快捷鍵不同。
持續看 macOS 資源macOS
top -o cpu依 CPU 排序顯示。
停止與調整優先權
送出正常終止訊號Linux/macOS
kill -TERM 1234讓程序有機會關檔與釋放資源。
重新載入設定訊號Linux/macOS
kill -HUP 1234是否支援與實際行為由該程式決定。
最後手段強制終止Linux/macOS
kill -KILL 1234不能被捕捉或清理;只在了解後果時使用。
依完整名稱送 TERMLinux
pkill -TERM -x process-name-x 限制完整名稱,先用 pgrep -x 驗證。
較低優先權啟動工作Linux/macOS
nice -n 10 long-jobnice 值越高,CPU 排程優先度通常越低。
調整既有程序 niceLinux/macOS
renice 10 -p 1234提高優先權通常需要較高權限。
Shell 背景工作
把工作放到背景Bash/Zsh
long-job &仍屬於目前 shell 的 job。
列出目前 shell 工作Bash/Zsh
jobs -l只看這個 shell 啟動的 job,不是全系統程序。
把暫停工作移到背景Bash/Zsh
bg %1先用 jobs 確認 job number。
把背景工作拉回前景Bash/Zsh
fg %1接回終端機互動。
登出後仍執行並寫 logLinux/macOS
nohup long-job > long-job.log 2>&1 &更正式的長期服務應交給 systemd、launchd 或排程器。
怎麼確認有做對
- 終止前後用 ps 或 pgrep 確認 PID 狀態。
- 檢查服務 log 與監控是否恢復。
- 若程序由 supervisor 管理,確認沒有立刻被重啟成異常循環。
常見錯誤
- 沒有確認 PID 就送 signal。
- 把 kill -9 當一般重啟。
- 只看瞬間 CPU 快照便下結論。
- 忘記程序其實由 systemd、Docker 或 Kubernetes 管理。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。