【发布时间】:2011-07-25 06:53:39
【问题描述】:
我有一个运行少量进程的软件 (c++)(每个进程本身就是一个主要系统)。
进程之间通过xml-rpc或boost asio进行通信
我希望能够在给定时刻冻结或停止所有进程,并能够稍后将系统(所有进程)提升到与休眠前相同的状态。
如何在 C++ 中做到这一点?
由于进程相互通信,这是否可行?
【问题讨论】:
-
在共享虚拟机中运行所有内容并休眠整个虚拟机可能更容易。
我有一个运行少量进程的软件 (c++)(每个进程本身就是一个主要系统)。
进程之间通过xml-rpc或boost asio进行通信
我希望能够在给定时刻冻结或停止所有进程,并能够稍后将系统(所有进程)提升到与休眠前相同的状态。
如何在 C++ 中做到这一点?
由于进程相互通信,这是否可行?
【问题讨论】:
大局是您需要让系统进入稳定一致的状态,然后以某种可重新创建的形式保持该状态。
您原则上可以编写这样的代码,难度取决于您的应用程序。您需要弄清楚以下内容:
我认为这是一项重大的编码工作,难度取决于您的应用程序的复杂性及其实现的质量。在一个结构良好的应用程序中,这种主要的“replumbing”练习通常出人意料地简单。
【讨论】:
除非您是操作系统 - 不,这是不可能的。
您需要做的是确保每个进程都可以自己完成(即:编写一个允许保存和恢复每个进程状态的功能),并且还以适应通信中的不一致(例如 - 确保消息上的 ACK,并在未收到 ACK 的情况下重新发送已保存状态)。
如果做得好,这是可行的,但当然,说起来容易做起来难,并且假设您实际上可以改变流程。
【讨论】:
嗯,
其他答案都很好。还有另一种相当“异国情调”的方法可以快速解决这个问题,但它可能是矫枉过正或不合适。但谁知道呢?所以以防万一……
我建议将您的程序运行到虚拟机中(我的意思是例如带有 vmware 的 linux)并随意暂停/唤醒该虚拟机。
如果您使用的是不受这种操作干扰的进程间通信方式,它可能会奏效并为您节省大量时间。
祝你好运。
【讨论】: