linux - 我可以核心转储一个阻塞磁盘事件的进程(最好不要杀死它)吗?

标签 linux cpu-registers coredump

我想根据 /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/

相关文章:

c - Linux的systemd的udev使用的 "keyboard-keys-from-name.h"在哪里?

linux - 那个核心转储到底在哪里?

c - 创建核心转储时设置退出状态

核心文件大小限制对进程具有不确定性影响

python - 虚拟机设置和同步项目依赖

php - Cron 作业在 Raspberry 中不起作用

c - 如何使用 sendfile 接收文件?

operating-system - ARM 的 ARM 处理器/操作系统是否有安全环?

assembly - 8085中不同寄存器的初值是多少?

c++ - 如何在 visual studio 中使用处理器寄存器?