我为一个相当难的数学问题开发了一个算法,这个问题可能需要几个月才能完成。由于我的资源有限,我在我的 Ubuntu 12.04 (x86) 笔记本电脑上开始了这个。现在我想安装一些更新并实际重新启动笔记本电脑(“请重新启动”消息很烦人)。
有没有办法保存整个进程,包括其分配的内存,以便在重启后继续?
以下是有关您可能需要的流程的一些信息。如果需要,请随时询问更多信息。
./binary > ./somefile &
”或“time ./binary > ./somefile &”调用了该进程,我真的记不清了。Ulr*_*gel 47
最好/最简单的解决方案是更改您的程序以将状态保存到文件中,然后重用该文件来恢复进程。
基于有关应用程序快照的维基百科页面,有多种选择:
CONFIG_CHECKPOINT_RESTORE
启用。这已经太晚了,但另一种更实际的方法是在专用 VM 中启动您的进程,然后挂起和恢复整个虚拟机。根据您的管理程序,您还可以在不同主机之间移动机器。
未来考虑在哪里运行长期运行的进程,如何并行化它们以及如何处理问题,例如磁盘已满、进程被终止等。
bah*_*mat 22
一种相当“便宜”的方法是在 VM 中进行处理(例如,使用 VirtualBox)。在关闭之前挂起 VM 并保存状态。启动后恢复虚拟机和状态。
这确实具有需要终止并重新启动作业的缺点。但如果它真的要运行几个月,那么 9 天的差异就变得微不足道了(6 个月内增加了 5%)。
编辑:我刚刚意识到 Ulrich 已经在他的清单上未编号的第 4 项中提到了这一点。
我仍然鼓励您将其视为一种选择,特别是因为没有一种替代方案看起来像一个强大的解决方案。每个人都有可能无法工作的原因。
我想最好的办法是尝试其中之一,如果它不起作用,则在 VM 中重新启动作业。
如果您最终需要重新启动您的程序,我建议您花一些时间在您的代码中添加一些功能,以便在将来节省您的时间。
如果进程要运行很长时间,如果进程在运行时崩溃,能够在重新启动机器时保存整个进程状态可能不会有很大帮助。
我鼓励您将程序输出到文件“检查点”数据。这些数据应该足以让您的程序能够从保存检查点文件时的状态恢复。您不需要保存整个过程,只需保存计算中使用的相关变量的快照,足以让您的计算从停止的地方继续。您的代码还需要包含从该文件中读取数据的某种方式,以获得它的起始状态。
您可以设置代码,以便在向其发送信号时,它会保存这些检查点文件之一,因此您可以随时保存计算的“状态”。
此外,能够看到数据如何随着计算的进行而变化本身可能很有趣!