我可以对阻塞磁盘活动的进程进行coredump(最好不要杀死它)吗?



我想转储一个正在运行的进程的核心,根据/proc/<pid>/status,该进程当前阻塞在磁盘活动上。实际上,它正忙于GPU上的工作(应该是4个小时的工作,但现在花费的时间明显更长)。我想知道进程的工作完成了多少,所以最好能够转储进程的内存。然而,据我所知,"阻塞磁盘活动"意味着不可能以任何方式中断进程,而coredump进程(例如使用gdb)需要中断并暂时停止进程,以便通过ptrace附加,对吗?

我知道我可以读取/proc/<pid>/{maps,mem}作为根来获得(可能不一致)内存状态,但我不知道任何方法来获得进程的用户空间CPU寄存器值…当进程在内核中时它们是一样的,对吧?

您可以在程序中运行gcore。它基本上是一个围绕GDB的包装器,它附加,使用gcore命令,然后再次分离。

这可能会中断你的IO(就好像它收到了一个信号,它会),但你的程序可能会重新启动它,如果写入正确(这可能发生在任何情况下,由于默认处理)。

相关内容

  • 没有找到相关文章

最新更新