7

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

我知道我可以/proc/<pid>/{maps,mem}以 root 身份读取以获取(可能是不一致的)内存状态,但我不知道有什么方法可以获取进程的用户空间 CPU 寄存器值......当进程在内部时它们保持不变内核,对吧?

4

1 回答 1

3

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

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

于 2013-03-24T12:39:57.683 回答