9

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

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

4

1 回答 1

4

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

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

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

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

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


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

于 2013-04-12T14:48:38.023 回答