Linux上的非阻塞核心转储?

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

我熟悉gdb的gcore ,但是只能在gdb连接到进程时才能运行,并且为了debugging而停止运行。 对于可能意味着几秒钟甚至几分钟的中断执行的大型核心转储。

有没有非阻塞的select?

Linux支持写入时拷贝(copy-on-write)内存,它依赖于在没有exec()情况下支持fork() exec() 。 所以我正在考虑一些内核级别的内核,在这个级别内核需要转储进程的进程页表的写时复制快照,然后在原始进程继续运行时写入内核。

我很确定我可以使用gdb强制fork()然后在父进程快乐的时候转储这个subprocess,然后在父进程中wait()以终止subprocess。 尽pipe这很麻烦,但仍然需要两次中断父母程序,尽pipe是短的。

当然有人需要这个?

    Google CoreDumper让人想起。 它会创build进程的地址空间的写入时复制副本,请参阅WriteCoreDump() (请参阅“注释”)。