是否有一种 保存当前所有系统进程信息到硬盘上,需要的时候再进行恢复的技术呢?

2018-06-03 09:51:38 +08:00
 AllOfMe

最近使用 VirtualBox 的快速休眠的功能时,突然想知道能不能像 VirtualBox 一样,把我当前的操作系统的所有进程信息等等都序列化到一个硬盘里的文件里,需要的时候再进行恢复。
理论上我感觉是可以的,因为操作系统有时候也要将不常用的进程放到外存来提升内存的更好的使用率。
如果这个功能能够实现,那么我可以开发的时候相当于多了很多个工作环境,比如说:我在开发前端,Chromium+Vscode+各种终端 Vim+各种文档,如果我这时候希望进行另外一个与刚刚前端完全不相关的后端开发任务,而我内存又受限(或者是窗口过多,太凌乱了),那我可以先保存当前前端工作进程到一个硬盘文件,需要的时候再动态切换。

我的操作系统是 Ubuntu 16.04 LTS,想想要是能实现都有点小激动!差

6010 次点击
所在节点    程序员
49 条回复
zjp
2018-06-03 09:55:22 +08:00
我们一般简称这个功能为休眠,Linux 上很可能不支持也不建议折腾
ThirdFlame
2018-06-03 10:00:28 +08:00
虚拟机快照
inframe
2018-06-03 10:00:53 +08:00
看起来想在处理广义的 PCB
单个进程这样做是没有问题的,但是所有进程都保存了,谁来完成序列化和保存这个操作以及反序列化到内存的恢复操作
SergeGao
2018-06-03 10:07:09 +08:00
这不是 windows 上的休眠吗。。。
woscaizi
2018-06-03 10:09:02 +08:00
可以利用在虚拟机工作来间接实现吧。
一种工作开一个虚拟机。
zjp
2018-06-03 10:13:02 +08:00
@zjp #1 没看清楚题目
问题是给系统创建快照之后又继续运行,要恢复时怎么解决冲突。虚拟机就直接覆盖了,丢失了后面的工作内容
fcten
2018-06-03 10:24:25 +08:00
进程间的依赖关系比较复杂,操作系统是无从得知的。如果不在应用程序层面进行处理,仅仅在操作系统层面挂起进程的话,很可能会导致各种无法预料的错误。这和虚拟机挂起整个系统是有区别的。
另外一个问题是,受限于磁盘读写速度,挂起和恢复大量进程的体验不会太好。
所以,如果真的有这样的需求的话,我选择多加一根内存条……
AllOfMe
2018-06-03 10:31:17 +08:00
@zjp
@SergeGao

我也知道这个休眠是可以实现的,但是能否休眠多个状态,然后自由的切换每个状态下以进行进程恢复呢?
AllOfMe
2018-06-03 10:32:25 +08:00
@woscaizi 的确是一个解决办法,可惜我内存不够开虚拟机啊&_&
ThirdFlame
2018-06-03 10:35:10 +08:00
@AllOfMe 理论上来说可以, 每次休眠独立产生休眠文件,启动时选择。
AllOfMe
2018-06-03 10:36:13 +08:00
@ThirdFlame 谢谢,我去了解一下
nifury
2018-06-03 10:39:00 +08:00
这个……不是虚拟内存么?操作系统在内存不足的时候会自动把不常用的页换到硬盘上的吧
likuku
2018-06-03 10:40:30 +08:00
要管理整个 OS/虚拟机的状态存取到硬盘,那得额外需要一个管理系统,

现有的专业虚拟机平台(Xen/VMWare ESXi) 之类就可以,虚拟机在这些系统上运行效率可是超高的。

何必这么折腾?如今机器的性能,花 3k-4k 的单价多买几个台式机同时用就行了呗。
AllOfMe
2018-06-03 10:40:38 +08:00
@nifury 我不是希望通过 swap 来扩展内存,我是想实现内存进程休眠保存,多个状态动态切换,即使我关了机之后,都有很多个休眠的状态可以给我选择。
likuku
2018-06-03 10:45:24 +08:00
@AllOfMe 单一 OS,即便实现需求,每次切换也得重启机器,这浪费时间精力也是够麻烦的...

不如单机装多系统得了,需要哪个环境,就重启进哪个系统。
reself
2018-06-03 10:45:34 +08:00
docker pause/unpause 了解一下
AllOfMe
2018-06-03 10:46:24 +08:00
@reself 可是我的操作系统并不是运行在 docker 里的。。不过谢谢,get 到一个 docker 命令
AllOfMe
2018-06-03 10:48:25 +08:00
@likuku 多系统我觉得不太方便,因为我多个开发任务用到的软件 nodeJS,jdk,python 以及自己设定的环境变量都不太好在多系统下实现。其实如果这个能够实现,那么我哪怕重启一下切换状态也不会太麻烦的
AllOfMe
2018-06-03 10:49:38 +08:00
@inframe 不一定是所有的进程都进行恢复,只恢复一些用户常用的进程即可,比如 vscode,vim,各种终端等等
RedStrings
2018-06-03 11:01:53 +08:00
脑洞佩服,这就是创新的起点啊;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/459951

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX