无法使用“kill -9”杀死 wget 进程

Bio*_*eek 2 kill wget

我有一个wget无法杀死的进程。这个问题是类似一个问过,但这里的DSTAT柱似乎表明,它是在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]
[...]
Run Code Online (Sandbox Code Playgroud)

试图杀死它不会产生任何输出

$ kill -9 2833351
Run Code Online (Sandbox Code Playgroud)

当我ps -axuf再次运行 时,该wget过程仍然存在。

如何找出导致此问题的软件/硬件故障?

Gil*_*il' 7

由于进程收到了一个 SIGKILL,当它从当前的系统调用返回时它就会死亡。此外,一旦进程进入可以安全地中止系统调用的状态,内核就会让进程返回。D如果内核内部发生异常情况,进程只会长时间处于不间断睡眠(状态)。有关不可终止进程的更多信息,请参阅如果“kill -9”不起作用怎么办?

调查进程正在做什么的一种方法是运行诊断工具,例如stracedtrace或其他类似工具,具体取决于您的 unix 风格。这将告诉您进程正在进行什么系统调用以及使用什么参数。例如,您可能会看到如下内容:

strace -p2833351
strace: Process 2833351 attached
read(3, 
Run Code Online (Sandbox Code Playgroud)

这告诉您进程当前正在从文件描述符 3 中读取。下一步是找出此文件描述符上的内容,例如使用lsof -p2833351ls -l /proc/2833351/fd/3。这可能指向问题的根源,例如无响应的 NFS 服务器或错误的磁盘控制器使文件系统驱动程序处于意外状态。

您还可以在系统日志中找到线索。线索可能很难找到,因为这是不寻常的行为,可能是由非常不同的事物引起的,这些事物会有非常不同的迹象。它可能是与进程正在执行的操作直接相关的内核错误、损坏了某些内存的无关内核错误、损坏了某些内存的有缺陷的 RAM、有缺陷的外围设备(例如磁盘驱动器在应有的时候没有响应等)。