首页 > 语言不限:程序快照有没有可能实现?

语言不限:程序快照有没有可能实现?

程序执行到半途,是否可以将当前所有的变量和状态等等全部保存到文件,然后退出进程。然后过一段时间再从文件将这些读取出来,继续从原来的地方执行?就像系统休眠时候将内存转存到磁盘。

这个语言不限,当然我想也只有汇编能这么个玩法了。当然一些解释型的语言像python, js的灵活性也是蛮高,可以用eval(string)来执行代码。大家说说想法,或者提供点有用的资料,都好。


UPDATE: 操作系统也不限吧,当然尽量在Linux和Windows两个我常用的上面吧。


这东西之前我查过。一开始我以为很简单,好像只需要将程序整个内存全放到磁盘就行了。但再想想觉得好麻烦,打开的文件、socket等等等等资源都不能直接序列化。操作系统还有内存地址随机的机制,对于已编译成机器指令的程序我不知道有什么方便的方法可以重新原样载入。

所以,假如这个程序不依赖任何外部状态,(如操作系统状态,显然重新载入后pid无法保证一样),那就较容易做。不过我感觉反而是汇编、C这些编译到机器指令的没有解释型语言或虚拟机方便,Lisp很早就实现了这种功能,将整个程序的内存镜象序列化到文件:http://en.wikibooks.org/wiki/Common_Lisp/Implementation_Issues#Dumping_a_Lisp_Image 。其它的解释型语言可以考虑用Meta解释器,比如用JS实现一个JS解释器,然后将整个Env序列化成JSON就OK了。

操作系统方面,kill -STOP;kill -CONT是不能序列化的,Linux Checkpoint/Restart 具体如何我也不太清楚。另外就是一些针对进程memory image dump的工具,我曾看到StackOverflow上推荐 CryoPID,不过好像已经停止维护了。

【热门文章】
【热门文章】