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

时间:2013-04-12 14:38:02

标签: c++ linux shared-memory

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

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

1 个答案:

答案 0 :(得分:4)

在类似Uni * x的系统上只是一个想法(未尝试过)。

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

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

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

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


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