我想在Linux上的C函数中收集核心转储而不终止进程

时间:2016-02-18 07:23:57

标签: c linux core

abort()会收集核心转储,但我不希望该进程终止。 dump_core()收集核心转储,但在内核空间中。用户空间中是否有与dump_core()等效的函数?

4 个答案:

答案 0 :(得分:2)

自己做的一个简单方法是fork进程(创建父进程的完整副本)并从子进程调用abort

子进程将通过核心转储中止,而父进程继续进行,就像没有发生任何事情一样。

答案 1 :(得分:2)

使用gcore

{ validate: false }

省略错误和边界检查。

答案 2 :(得分:1)

没有这样的Linux C命令。但是,您可能会找到一些可以为您执行此操作的第三方工具。例如,Google coredumper,它也应该能够捕获所有线程。另一种方法是将gdb附加到正在运行的进程,并发出gcore命令。这基本上是gcore命令行实用程序的功能。

答案 3 :(得分:1)

每当coredumps时,内核都会向进程生成SIGSEGV信号,我认为你应该将一个处理程序附加到SIGSEGV信号(Link)并从该处理函数调用fork。