我有一个在Debain on Arm上运行的守护程序。有时,该守护程序挂起/不再响应。当使用“ps ax”查看过程时,stat列为“Dl”,表示“不间断睡眠(通常为IO)”。是否可以找到有关进程正在等待的更多详细信息,例如哪个IO挂起?
谢谢!
最佳答案
我对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
关于linux - 流程处于可中断的 sleep 中-如何找出其等待的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35987982/