【问题标题】:Is it possible to cause multi processes hibernate (core dump?)?是否有可能导致多进程休眠(核心转储?)?
【发布时间】:2011-07-25 06:53:39
【问题描述】:

我有一个运行少量进程的软件 (c++)(每个进程本身就是一个主要系统)。

进程之间通过xml-rpc或boost asio进行通信

我希望能够在给定时刻冻结或停止所有进程,并能够稍后将系统(所有进程)提升到与休眠前相同的状态。

如何在 C++ 中做到这一点?

由于进程相互通信,这是否可行?

【问题讨论】:

  • 在共享虚拟机中运行所有内容并休眠整个虚拟机可能更容易。

标签: c++ coredump


【解决方案1】:

大局是您需要让系统进入稳定一致的状态,然后以某种可重新创建的形式保持该状态。

您原则上可以编写这样的代码,难度取决于您的应用程序。您需要弄清楚以下内容:

  • 进程如何同意它们处于一致状态。您可能需要定义一些新的“准备休眠”和“我准备好了”消息。
  • 对于每个进程,您需要弄清楚如何保持和恢复其状态。取决于任何可能非常棘手的实时数据结构的复杂性。另一方面,如果您的流程是无状态的,那么这将非常容易。
  • 您需要设计一个方案来管理休眠数据集,以及如何确定跨所有进程的一致数据集。

我认为这是一项重大的编码工作,难度取决于您的应用程序的复杂性及其实现的质量。在一个结构良好的应用程序中,这种主要的“replumbing”练习通常出人意料地简单。

【讨论】:

    【解决方案2】:

    除非您是操作系统 - 不,这是不可能的。

    您需要做的是确保每个进程都可以自己完成(即:编写一个允许保存和恢复每个进程状态的功能),并且还以适应通信中的不一致(例如 - 确保消息上的 ACK,并在未收到 ACK 的情况下重新发送已保存状态)。

    如果做得好,这是可行的,但当然,说起来容易做起来难,并且假设您实际上可以改变流程。

    【讨论】:

      【解决方案3】:

      嗯,

      其他答案都很好。还有另一种相当“异国情调”的方法可以快速解决这个问题,但它可能是矫枉过正或不合适。但谁知道呢?所以以防万一……

      我建议将您的程序运行到虚拟机中(我的意思是例如带有 vmware 的 linux)并随意暂停/唤醒该虚拟机。

      如果您使用的是不受这种操作干扰的进程间通信方式,它可能会奏效并为您节省大量时间。

      祝你好运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 1970-01-01
        • 2013-08-05
        相关资源
        最近更新 更多