Linux 上是否存在非阻塞核心转储?

Linux 上是否存在非阻塞核心转储?

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

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

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

Linux 支持写时复制内存,它依靠fork()该内存来支持exec()。因此,我正在考虑内核级别的某些东西,其中内核对正在转储的进程的进程页表进行写时复制快照,然后在原始进程继续运行的同时将核心写出。

我确信我可以使用gdb强制fork()然后抛弃子进程,而父进程则继续愉快地运行,然后wait()在终止后让父进程收割子进程。不过,这很麻烦,而且仍然需要中断父进程两次,尽管中断时间很短。

肯定有人以前需要过这个吧?

答案1

谷歌CoreDumper突然想到了。它对进程的地址空间进行写时复制,请参阅写入核心转储()(见“注释”)。

相关内容