流程处于可中断的睡眠状态 - 如何找出它正在等待的东西

时间:2016-03-14 12:48:25

标签: linux process daemon

我在Debain on Arm上有一个守护进程。有时候这个守护进程会挂起/不再响应。使用" ps ax"查看过程时stat列是" Dl"这意味着"不间断睡眠(通常为IO)"。是否有可能找到有关进程正在等待的更多详细信息 - 例如哪个IO挂起?

谢谢!

1 个答案:

答案 0 :(得分:0)

我对Jetson Nano(ARMv8,内核体系结构:aarch64)有同样的疑问,它挂在ptxas命令上。

首先,我们要了解在不间断睡眠状态下处理的含义。阅读:What is an uninterruptible process?Linux process states

简而言之:不间断睡眠中的过程只能通过等待的时间来唤醒。不能被任何信号唤醒。

要调查正在发生的事情,您可以检查进程堆栈

cat /proc/<PROCESS_PID>/stack

在我的情况下是

[nano]<$:~$ sudo cat /proc/6816/stack
[<ffffff80080863bc>] __switch_to+0x9c/0xc0
[<ffffff80081c6fdc>] wait_on_page_bit_killable+0x8c/0x98
[<ffffff80081c7948>] __lock_page_or_retry+0xc0/0xe8
[<ffffff80082029b8>] do_swap_page+0x5d0/0x840
[<ffffff8008204be4>] handle_mm_fault+0x60c/0xa68
[<ffffff80080a36b0>] do_page_fault+0x308/0x518
[<ffffff80080a392c>] do_translation_fault+0x6c/0x80
[<ffffff8008080954>] do_mem_abort+0x54/0xb0
[<ffffff80080833c8>] el0_da+0x20/0x24
[<ffffffffffffffff>] 0xffffffffffffffff

如何阻止这种情况发生?

要视情况而定。就我而言,我增加了交换大小。

这可能是一个愚蠢的问题,但是有什么方法可以在不重新启动计算机的情况下中断它?

处于不间断睡眠状态的进程有时可能会更改为可间断状态,然后再次返回到先前的不间断状态。因此,您可以尝试

while true; do kill -9 <PROCESS_PID>; done