Linux 上的非阻塞核心转储?

Cra*_*ger 24 linux dump gdb

我正在寻找一种对 Linux 上正在运行的进程进行非侵入式核心转储的方法。

我熟悉 gdb 的gcore,但它只能在gdb附加到进程时运行并且它停止调试。对于一个大的核心转储,这可能意味着多秒甚至几分钟的中断执行。

有没有非阻塞的替代方案?

Linux 支持写时复制内存,它依赖于在fork()没有exec(). 所以我在考虑一些内核级别的事情,其中​​内核获取正在转储的进程的进程页表的写时复制快照,然后在原始进程继续运行的同时写出核心。

我很确定我可以使用gdb强制fork()然后转储孩子,而父母愉快地继续,然后wait()在父母终止后收割孩子。但是,它很混乱,并且仍然需要两次中断父进程,尽管很短。

以前肯定有人需要这个吗?

小智 2

我想到了Google CoreDumper 。它创建进程地址空间的写时复制副本,请参阅WriteCoreDump()(请参阅“注释”)。