Windows 的休眠,相当于把操作系统+软件的运行状态,从内存搬到硬盘,然后断电。下次启动,从硬盘搬回到内存,就恢复之前的运行状态了,可继续工作
请问下各位朋友,有没有“针对软件”的这种休眠工具?即,把某一软件当前的运行状态,从内存搬到硬盘后,即可关闭该软件。下次直接把该软件,从硬盘搬回到内存,就恢复该软件之前的运行状态了,可继续上次没做完的工作。
例如,一款搜索软件,不提供“搜索结果列表”的保存功能,每次启动,又要重复做一次漫长的搜索,只为那一样的结果列表。如果有这种针对软件的休眠工具,就可避免每次重复搜索了,启动后直接载入上次的结果列表
请教下,有这种现成的工具吗?
PS: 上面是基于普通用户的视角,描述需求。程序员视角可能不满意。例如软件是指单个进程 or 进程组?下次搬回内存,网络套接字断了怎么办?……这些细节,我文科生没能力描述清晰。总之,大概想要的就如上描述,有大概、类似符合吗?欢迎朋友推荐下,谢谢😘
1
daigouspy 2018-08-30 06:04:59 +08:00 via Android
新版的 win10,打开任务管理器,看到有绿色图标的进程吗?
|
2
orochix 2018-08-30 08:31:36 +08:00 via Android
进度保存?
|
3
pimin 2018-08-30 09:06:24 +08:00
如果从软件自身考虑,还是比较容易实现的,状态保存
但是如果从外部入手,难度会比较大 软件运行时探明的系统环境变量,在下一次启动的时候可能都发生了变化 很容易出现异常 |
4
jasonyang9 2018-08-30 09:51:10 +08:00
粗暴一点的方案:给它弄个虚拟机,直接休眠虚拟机即可
|
5
flynaj 2018-08-30 11:11:07 +08:00 via Android
这个不大可能,用过系统休眠的就知道,刚唤醒时候都是网络重连,如果程序没有处理就网络异常,还有播放视频休眠,唤醒后很大可能出错
|
6
geelaw 2018-08-30 11:15:09 +08:00
@daigouspy #1 那些进程都是设计成本来就可以随时被挂起的。
答案是,很难,参见 https://blogs.msdn.microsoft.com/oldnewthing/20040420-00/?p=39723/ |
7
geelaw 2018-08-30 11:31:32 +08:00 1
@geelaw #6 发现楼主说自己是文科生,那我简单解释一下吧。
我们先来解决楼主的问题,如果你不希望软件重新搜索,最简单的方式是不要关掉这个软件。 楼主自己提的问题:网络套接字断了怎么办?答案是:这是一个非常简单的情况,就把它断了就行了,一个正常的程序已经料到网络随时会断开(比如网线被拔了、离开了 Wi-Fi 范围、突然丢失信号或者网络状况突然很差跟断了没两样),所以会自己处理这种情况。 先上 Raymond Chen 的总结:如果你希望有这种功能,就需要自己写这种代码。例如 Windows 应用商店应用理应任何时候都可以被挂起,且挂起任何时候都可以被关掉而没有进一步通知。 Raymond Chen 给出了两种情况的讨论。 第一种:所有的对象立刻无效。那么假设一个进程在临界区里,你一旦休眠这个进程,它就突然离开了临界区,但再次恢复时它可没料到这种情况。如果一个进程独占一个文件,休眠之后其他进程可以使用这个文件,恢复之后程序会乱套。 第二种:所有的对象仍然有效。那么你可以用一个进程独占打开 20GB 的文件,然后休眠(甚至删掉休眠文件),这会导致那个文件不能删除——重启都没用。另外,休眠一个暂时持有某个资源(例如网络)的进程会导致其他进程无法使用该资源。 进一步:如果这个进程有窗口怎么办?窗口消息会怎么样?会不会保存起来之后重放?如果有人等待窗口消息的回复又怎么办,挂起直到恢复吗?如果是“用户将要拔掉 U 盘,请你速速写完并关闭文件”的消息,要么用户没法安全删除硬件,要么得到损坏的数据。 那篇 blog 的评论区有人提问:为什么不能定义进程的“可休眠性”且只允许可休眠进程休眠?如果一个进程有一把锁或者打开了文件,显然不能休眠该进程。 Raymond Chen 的回复:有些对象没有“所有者”的概念,例如 semaphore (信号量)和 event (事件)。 |