当系统挂起时,我需要在linux内核中转储每个进程堆栈。
我目前正在尝试基于看门狗定时器超时在我的一个内核模块中实现。 每个时间片都由用户守护程序重置监视程序计时器。 当系统挂起时,没有人重置计时器。 因此它会过期并产生中断。 我写了一个中断处理程序,我应该转储每个进程运行的堆栈。
所以,我的问题是如何在内核中转储每个进程的堆栈?
由于 卡塔斯
答案 0 :(得分:0)
show_state()(include / linux / sched.h)将为您完成此操作。顺便说一句,这个函数已经可以从sysrq处理程序中获得,如果它已经启用,你可以使用它。请参阅Documentation / sysrq.txt
此外,您可以启用一些其他内核调试选项来帮助查找问题。查看make menuconfig中的Kernel Hacking菜单。特别是,CONFIG_LOCKUP_DETECTOR(菜单中的“检测硬锁定和软锁定”)可能会有所帮助。