Linux
我什麼時候不應該殺死 -9 一個程序?
我總是很猶豫要不要跑步
kill -9
,但我看到其他管理員幾乎是例行公事。我認為可能有一個明智的中間立場,所以:
- 何時以及為什麼應該
kill -9
使用?何時以及為什麼不?- 在做之前應該嘗試什麼?
- 什麼樣的調試“掛起”的程序可能會導致進一步的問題?
通常,您應該在 () 之前使用(縮寫
kill
,kill -s TERM
或在大多數係統上),以使目標程序有機會自行清理。(程序不能 catch 或 ignore ,但它們可以並且經常會 catch 。)如果你不給程序一個機會來完成它正在做的事情並清理它,它可能會在它周圍留下損壞的文件(或其他狀態)重啟後就看不懂了。kill -15``kill -9``kill -s KILL``SIGKILL``SIGTERM
strace
/truss
,ltrace
並且gdb
通常是查看卡住程序為何卡住的好主意。(truss -u
在 Solaris 上特別有用;我發現ltrace
經常以不可用的格式向庫呼叫提供參數。) Solaris 也有有用/proc
的基於 的工具,其中一些已被移植到 Linux。(pstack
通常很有幫助)。