我想根据 /proc/<pid>/status
转储正在运行的进程的核心,目前正在阻止磁盘事件。实际上,它正忙于在 GPU 上工作(应该是 4 个小时的工作,但现在花费的时间明显更长了)。我想知道进程的工作已经完成了多少,所以能够转储进程的内存会很好。但是,据我所知,“阻止磁盘事件”意味着不可能以任何方式中断进程,并且无法核心转储进程,例如使用 gdb 需要中断并暂时停止进程才能通过 ptrace 连接,对吗?
我知道我可以阅读 /proc/<pid>/{maps,mem}
作为 root 获取(可能不一致的)内存状态,但我不知道有什么方法可以获取进程的用户空间 CPU 寄存器值......当进程在内核中时它们保持不变,对吧?
最佳答案
您或许可以在您的程序上运行gcore
。它基本上是 GDB 的包装器,可以附加、使用 gcore
命令,然后再次分离。
这可能会中断您的 IO(就好像它收到了一个信号,它会这样做),但如果编写正确,您的程序可能会重新启动它(由于默认处理,这在任何情况下都可能发生)。
关于linux - 我可以核心转储一个阻塞磁盘事件的进程(最好不要杀死它)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15567418/