Answers:
我曾经维护过CryoPID,这是一个完全可以满足您所谈论内容的程序。它将程序的地址空间,VDSO,文件描述符引用和状态的内容写入文件,以便以后进行重构。当Linux本身没有可用的钩子时,CryoPID开始运行,并且完全在用户空间中工作(实际上,它仍然可以工作,具体取决于发行版/内核/安全性设置)。
问题包括(确实)套接字,待处理的RT信号,许多X11问题,glibc缓存getpid()实现等。伯纳德(Bernard)离开随机存取技术后,对我们中的少数人来说,随机存取(尤其是VDSO)是无法克服的。但是,它很有趣,并成为了几篇硕士论文的主题。
如果您只是在考虑一个可以保存其运行状态并直接重新启动进入该状态的程序,那么从程序本身内部保存信息(可能是在维修信号时)就容易多了。
自2014年起,我想在此发布状态更新。
可接受的答案表明CryoPID可作为执行Checkpoint / Restore的工具,但我发现该项目没有维护,无法使用最新的内核进行编译。现在,我发现了两个主动维护的项目,它们提供了应用程序检查点功能。
第一个是我建议的原因,因为运气更好,它是CRIU ,它主要在用户空间中执行检查点/还原,并且需要启用内核选项CONFIG_CHECKPOINT_RESTORE。
在用户空间中检查点/还原,或CRIU(发音为kree-oo,IPA:/krɪʊ/,俄语:криу)是Linux操作系统的软件工具。使用此工具,您可以冻结一个正在运行的应用程序(或其一部分),并将其作为文件集合检查点到硬盘上。然后,您可以使用文件从冻结点开始还原并运行该应用程序。CRIU项目的独特之处在于它主要在用户空间中实现。
后者是DMTCP ; 从他们的主页引用:
DMTCP(分布式多线程检查点)是一种透明检查多个并发应用程序(包括多线程和分布式应用程序)状态的工具。它直接在用户二进制可执行文件上运行,而无需任何Linux内核模块或其他内核修改。
在参数上也有一个不错的Wikipedia页面:Application_checkpointing
简短的回答是“是,但并非总是可靠”。查看CryoPID:
打开文件确实将是最常见的问题。CryoPID明确指出:
打开的文件和偏移量将恢复。已取消链接并且无法在文件系统上访问的临时文件始终保存在映像中。恢复时不存在的其他文件尚未还原。计划支持在这种情况下保存文件内容。
尽管CryoPID支持tcpcp进行连接恢复,但相同的问题也将影响TCP连接。
Linux Kernel现在已经部分实现了检查点/重启期货:https : //ckpt.wiki.kernel.org/,状态在这里。
一些有用的信息在lwn(Linux每周网络)中:http ://lwn.net/Articles/375855/ http://lwn.net/Articles/412749/ ......
所以答案是“是”
简短的回答是“是”。您可能会从以下想法开始:从核心映像进行ELF可执行文件重构(http://vx.netlux.org/lib/vsc03.html)
添加另一个解决方法:您可以使用virtualbox。在常规虚拟机中运行您的应用程序,并且只要需要就可以简单地“保存计算机状态”。我知道这不是答案,但是我认为如果没有实际选择,这可能会很有用。
如果由于某种原因您不喜欢virtualbox,vmware和Qemu都不错。