Wget

無法使用kill -9殺死wget程序

  • October 21, 2021

我有一個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”不起作用怎麼辦?

調查程序正在做什麼的一種方法是執行診斷工具,例如stracedtrace或其他類似工具,具體取決於您的 unix 風格。這將告訴您該程序正在進行什麼系統呼叫以及使用什麼參數。例如,您可能會看到如下內容:

strace -p2833351
strace: Process 2833351 attached
read(3, 

這告訴您該程序目前正在從文件描述符 3 中讀取。下一步是找出此文件描述符上的內容,例如 withlsof -p2833351或 with ls -l /proc/2833351/fd/3。這可能指向問題的根源,例如無響應的 NFS 伺服器或有故障的磁碟控制器導致文件系統驅動程序處於意外狀態。

您還可以在系統日誌中找到線索。線索可能很難找到,因為這是不尋常的行為,可能是由非常不同的事情引起的,這些事情會有非常不同的跡象。它可能是與程序正在執行的操作直接相關的核心錯誤、損壞某些記憶體的無關核心錯誤、損壞某些記憶體的有缺陷的 RAM、有缺陷的外圍設備(如磁碟驅動器在應有的時候沒有響應)等等。

引用自:https://unix.stackexchange.com/questions/646826