2011-07-25 43 views
2

我有一个运行少量进程的软件(C++)(每个进程本身就是一个主要系统)。是否有可能导致多进程休眠(核心转储?)?

的过程通过XML-RPC有相互通信或更高版本提升ASIO

我希望能够冻结或在某一时刻停止所有进程,并能够提高系统(所有进程)与之前的冬眠状态相同。

我怎么能在C++中做到这一点?

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

+0

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

回答

0

除非你是一个操作系统 - 否,这是不可能的。

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

如果做得对,这是可行的,但当然,说起来容易做起来难,而且假定你实际上可以改变流程。

2

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

你原则上可以编写这样的代码,难度取决于你的应用程序。你需要弄清楚的东西,如:

  • 过程如何同意,他们是一致的状态。您可能需要定义一些新的“准备好休眠”和“我准备好”消息。
  • 对于每个过程,你需要弄清楚如何坚​​持和恢复它的状态。取决于任何可能相当棘手的实时数据结构的复杂性。另一方面,如果你的进程是无状态的,那么这可能非常简单。
  • 您需要设计一套用于管理休眠数据集的方案,以确定如何确定所有进程中的一致集。

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

0

那么,

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

我建议你运行你的程序到虚拟机(我的意思是例如一个Linux与VMware),并暂停/唤醒这个虚拟机随意。

如果您使用的是不受此类操作干扰的进程间通信方法,它可能会工作并为您节省大量时间。

祝你好运。