我正在寻找一种方法来在Linux上运行正在运行的进程的非侵入性核心转储。
我熟悉gdb的gcore
,但是只能在gdb
连接到进程时才能运行,并且为了debugging而停止运行。 对于可能意味着几秒钟甚至几分钟的中断执行的大型核心转储。
有没有非阻塞的select?
Linux支持写入时拷贝(copy-on-write)内存,它依赖于在没有exec()
情况下支持fork()
exec()
。 所以我正在考虑一些内核级别的内核,在这个级别内核需要转储进程的进程页表的写时复制快照,然后在原始进程继续运行时写入内核。
我很确定我可以使用gdb
强制fork()
然后在父进程快乐的时候转储这个subprocess,然后在父进程中wait()
以终止subprocess。 尽pipe这很麻烦,但仍然需要两次中断父母程序,尽pipe是短的。
当然有人需要这个?
Google CoreDumper让人想起。 它会创build进程的地址空间的写入时复制副本,请参阅WriteCoreDump() (请参阅“注释”)。