gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:14:30 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

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


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

关于c++ - 我有一个在 linux 上运行的 c++ 程序,是否可以让它定期将状态快照存储在共享内存中以用于崩溃后恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15974218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com