【问题标题】:Dump process memory on exit linux在退出 linux 时转储进程内存
【发布时间】:2018-03-08 10:40:41
【问题描述】:

我想在进程退出时转储它的内存。我见过的所有使用gcoregdb 甚至procdump for linux 的解决方案都在执行过程中转储核心,而不是在它终止时转储

Procdump for windows 对此有一个非常优雅的解决方案,即-t 将允许 procdump 在进程退出时创建转储。

我偶然发现了ulimit -c unlimited,但这又只会为非优雅退出生成转储。

我想要转储的进程可以是任何进程,而不是我的应用程序。

【问题讨论】:

  • 但是当进程退出时,没有什么可以转储的,因为进程已经不存在了。 “进程退出”是什么意思?
  • 为您的应用程序安装信号处理程序,当它即将退出时,只需使用 C 代码转储,以下链接在 C stackoverflow.com/questions/3342335/dump-memory-of-a-process 中执行此操作
  • @ks1322,当进程退出时,我的意思是当它即将退出时。正是 windows 的 procdump -t 选项的作用。
  • @PrabhakarLad,我需要转储的不是我的进程内存。它可以是任何进程,我只需要一个进程ID并在进程即将退出时立即转储内存。
  • 编写一个 c 应用程序(安装信号处理程序 SIGCHILD),fork 一个您想要监控的进程并参考我之前帖子中的链接来转储内存。

标签: linux ulimit procdump gcore


【解决方案1】:

如果你想用 gdb 模仿这种行为:

Windows 的 Procdump 对此有一个非常优雅的解决方案,即 -t 将允许 procdump 在进程退出时创建转储。

首先你创建一个文件'mycommand.txt':

b exit
r
generate-core-file ./core.1
q

然后你开始你的程序:

 gdb --command mycommand.txt yourprogram 

您的工作目录中将有一个名为 core.1 的文件。检查:

gdb yourprogram core.1

【讨论】:

  • gdb 命令行应该是gdb -x mycommand.txt yourprogram
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 2014-05-27
  • 1970-01-01
相关资源
最近更新 更多