Wget無法使用
無法使用kill -9
殺死wget程序
我有一個
wget
無法殺死的程序。這個問題與之前提出的問題類似,但這裡列D
中的STAT
似乎表明它處於uninterruptible sleep (usually IO)
狀態,而在另一個問題中,程序處於狀態R
。$ ps -axuf | grep `id -un` USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND [...] biogeek 2833351 0.0 0.0 0 0 ? D Apr12 0:03 [wget] [...]
試圖殺死它不會產生任何輸出
$ kill -9 2833351
當我
ps -axuf
再次執行時,該wget
過程仍然存在。如何確定導致此問題的軟體/硬體故障?
由於程序已收到 SIGKILL,因此當它從目前系統呼叫返回時,它將死亡。此外,核心將在程序進入可以安全中止系統呼叫的狀態後立即返回。
D
如果核心內部發生異常情況,程序只會長時間保持不間斷睡眠(狀態)。有關無法殺死的程序的更多資訊,請參閱如果“kill -9”不起作用怎麼辦?調查程序正在做什麼的一種方法是執行診斷工具,例如strace或dtrace或其他類似工具,具體取決於您的 unix 風格。這將告訴您該程序正在進行什麼系統呼叫以及使用什麼參數。例如,您可能會看到如下內容:
strace -p2833351 strace: Process 2833351 attached read(3,
這告訴您該程序目前正在從文件描述符 3 中讀取。下一步是找出此文件描述符上的內容,例如 with
lsof -p2833351
或 withls -l /proc/2833351/fd/3
。這可能指向問題的根源,例如無響應的 NFS 伺服器或有故障的磁碟控制器導致文件系統驅動程序處於意外狀態。您還可以在系統日誌中找到線索。線索可能很難找到,因為這是不尋常的行為,可能是由非常不同的事情引起的,這些事情會有非常不同的跡象。它可能是與程序正在執行的操作直接相關的核心錯誤、損壞某些記憶體的無關核心錯誤、損壞某些記憶體的有缺陷的 RAM、有缺陷的外圍設備(如磁碟驅動器在應有的時候沒有響應)等等。