我有一个在linux上运行的c ++程序,是否可以让它定期将状态快照存储在共享内存中以进行崩溃后恢复?

Pal*_*han 9 c++ linux shared-memory

我不知道如何去做,因为我已经看到了用于进程间通信的共享内存的例子.我想知道我是否可以从服务器中利用它来获取某些对象的定期快照,并以某种格式将它们转储到共享内存中...如果我的程序崩溃了......可以在重新启动程序时检索复苏.这可行吗?如果是这样,我可以看一下如何开始?

更新:我在某处看到Linux上的共享内存(我在linux上)是持久性的,所以我想我可能能够定期保存状态快照而无需辅助进程.比方说,一个不断更新的结构,我每隔几秒就转储到共享内存.我选择共享内存而不是文件的原因纯粹是为了速度,因为状态会是很多二进制数据.

Tru*_*ueY 4

只是在类 Unix 系统上的一个想法(未尝试过)。

执行 fork(2) 并向该子进程发送 SIGTRAP 信号(或创建核心转储的任何信号)。

Fork 复制原始进程环境。这将转储完整的内存状态。然后可以通过gdb(或类似的)对其进行分析。当然不是为了恢复...

您可以创建一个文件,并且可以从使用核心文件gdbinit调用的脚本中转储变量。gdb

为什么需要共享内存?将状态转储到磁盘不是很好吗?


我认为这也可以用于恢复。Perl -u 命令行参数做类似的事情。它解析脚本文件并转储核心文件。undump程序可以使用此核心文件将核心直接加载到内存并启动 perl,而无需解析阶段。