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