我想转储正在运行的进程的核心,根据/proc/<pid>/status
,当前阻止磁盘活动。实际上,它正忙于在GPU上工作(应该是4个小时的工作,但现在已经花了很长时间)。我想知道这个过程的工作有多少,所以能够转储进程的内存是件好事。但是,据我所知,“阻止磁盘活动”意味着不可能以任何方式中断该过程,并且可以重新集中进程。使用gdb需要中断并暂时停止进程才能通过ptrace连接,对吧?
我知道我只能以root身份阅读/proc/<pid>/{maps,mem}
以获得(可能不一致的)内存状态,但我不知道如何获取进程的用户空间CPU寄存器值...他们留下来当进程在内核中时,同样吗?
答案 0 :(得分:3)
您可以在程序上运行gcore
。它基本上是一个附加GDB的包装器,使用gcore
命令,并再次分离。
这可能会中断您的IO(就像它收到一个信号一样),但如果写得正确,您的程序可能会重新启动它(由于默认处理,这种情况可能会发生)。