【转】教你弄清 OSX 的睡眠模式,以及合法的禁止产生 sleepimage
因为之前用的是网上流传的土法来禁止生成 sleepimage,尝到了苦头,而且2次!
大家知道 OSX 有几种睡眠模式,其中 hibernatemode 可以是 0 (传统睡眠方式,不生成 sleepimage
文件),3 和 25 (Apple 称之安全睡眠方式,会生成 sleepimage 文件),大家也都知道可以用 sudo pmset
-a hibernatemode 0 来禁止那个内存镜像文件。
以前这个命令一直可用,直到 OS X Mountain Lion
v10.8.2,大家突然发现这个命令不起作用了,重启电脑或者睡眠一段时间后,那个 sleepimage 又回来了。换句话说,某些型号的
mac,似乎强制使用安全睡眠方式。
然后网上就有各种土法,粗暴之极,诸如建立一个只读的空文件,或者用 sudo ln -s /dev/null
/var/vm/sleepimage
把内存镜像引入系统黑洞。这些土法,一般用用大概没什么问题,就算有问题,你大概也不会太在意,譬如程序崩溃,大不了重新启动好了。
我之前就是用 /dev/null 这个方法,然后我2次系统升级都出问题,2个月前 10.9.2 升级到 10.9.3 时,以及昨天
10.9.3 升级到 10.9.4
时,升级安装界面2次都停留在同一个地方,说还有几分钟就好了,然后,然后,就没有然后了,等了一个多小时,状态条动都不动。不得已强行关机。
因为我没弄其他任何所谓的系统调试东西,唯一运行过的 sudo 命令就是这个,所以怀疑是这个土法导致升级出错。
然后就觉得要花点时间弄明白 OSX 的睡眠方式,如果真不能禁止 sleepimage,死也要死得明白。
以下是我的理解,绝对不同于各大中文 Mac 网站抄来抄去的那些东西。欢迎探讨。
OSX 的睡眠参数,可以打 pmset -g 了解一下你的电脑处在什么睡眠模式下:
比较有兴趣的参数:
standbydelay 10800
standby 0
autopoweroffdelay
14400
autopoweroff 0
hibernatemode 0
这几个参数组成了 OSX 的睡眠模式。
当睡眠开始时,合上盖子,或者按电源键,如果你的 hibernatemode 是 0,OSX 是不立即往硬盘上写内存镜像的。
autopoweroff 这是欧盟的节能要求,满足以下条件时:
- 接电源
- 没有外接设备
- 没有网络活动
- 电脑是 MacBook Pro (Mid 2012 and
later), MacBook Pro (Retina, Mid 2012 and later), MacBook Air (Mid
2012 and later), iMac (Late 2012 and later), Mac mini (Late 2012
and later)
到了 autopoweroffdelay x 秒后,就开始启动安全睡眠模式,往硬盘上写
sleepimage,然后进入深度睡眠。
standby 满足以下条件时:
- 用电池
- 没有外接设备
- 没有网络活动
- 没有外接显示器
- 电脑是 MacBook Pro (Retina,
13-inch, Late 2012) and later, MacBook Pro (Retina, 15-inch, Early
2013) and later, MacBook Pro (Retina, Mid 2012), MacBook Air (Mid
2010) and later, SSD and Fusion drive versions of Mac mini (Late
2012) and later, SSD and Fusion drive versions of iMac (Late 2012)
and later
到了 standbydelay x 秒后,就开始启动安全睡眠模式,往硬盘上写 sleepimage,然后进入深度睡眠。
可见,Apple
的安全睡眠其实是个统称,具体是由2个参数激发的,这2个参数都可以在普通睡眠一段时间后让电脑进入深度睡眠状态,但是作用的条件不相同,基本上一个是接电源时用,一个是用电池时用。
这也说明了为什么有人抱怨为什么在设置了 hibernatemode 0 后,睡眠了一段时间后,那个 sleepimage
文件又出现了,而有人说没有。这取决于他们各自睡眠的时间以及延迟时间的设定,合上又马上打开,那个文件是不会立即生成的。
所以,要完全的,合法的禁止 sleepimage 文件,不但要设置 hibernatemode
0,还要禁止电源和电池情况下的节能设置。
也就是说,你要跑下面的命令才行:
sudo pmset -a hibernatemode
0
sudo pmset -a autopoweroff
0
sudo pmset -a standby
0
sudo rm /var/vm/sleepimage
然后不管你怎么重启,睡眠n久,都不会再生成内存镜像文件了,当然你的电脑就无法再进入深度睡眠模式,Apple
官方说电池待机能力可能会稍稍降低,但我看也未必,普通睡眠状态下电压已经非常小了。
如果不在乎硬盘空间的,或许不用管它,用 0 即可,也就是普通睡眠了几个小时后才往硬盘写内存镜像文件,再进入深度睡眠。
如果你也不在乎经常读写硬盘的,或者懒得折腾任何东西的,也可以用缺省模式,对笔记本来说是
3,也就是睡眠后马上就写内存镜像文件,再在几个小时后进入深度睡眠。
怎么知道电脑进入了深度睡眠?就是唤醒时看到灰屏,和载入进度条。
OSX 的深度睡眠看起来还是不错的,有机会可以跟人卖弄一下,它的深度睡眠,可以待机 1
个月。当然如果真的有人这么做,那这人肯定是缺心眼的了。
【转】教你弄清 OSX 的睡眠模式,以及合法的禁止产生 sleepimage的更多相关文章
- MAC的睡眠模式介绍
因为之前用的是网上流传的土法来禁止生成 sleepimage,尝到了苦头,而且2次! 大家知道 OSX 有几种睡眠模式,其中 hibernatemode 可以是 0 (传统睡眠方式,不生成 sleep ...
- CentOS 7合盖后黑屏但不进入睡眠模式修改
CentOS 7合盖后黑屏但不进入睡眠模式修改 systemd 能够处理某些电源相关的 ACPI事件,你可以通过从 /etc/systemd/logind.conf 以下选项进行配置: HandleP ...
- ESP8266的低功耗方案-睡眠模式
在某些时候我们设计的产品可能不具备持久供电的环境,那通常会采用锂电池.干电池一类的轻便型的非持久性电源.当遇到这种情况时,产品的续航能力可能就会成用户评估产品的一个重要指标,加大电池容量当然是最为直接 ...
- 第21章 RTX 低功耗之睡眠模式
低功耗是 MCU 的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验. 本章节为大家讲解 M3/4的低功耗方式之睡 ...
- FreeRTOS 低功耗之睡眠模式
以下转载自安富莱电子: http://forum.armfly.com/forum.php 低功耗是 MCU 的一项重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话 ...
- 详解Mac睡眠模式设置
详解Mac睡眠模式设置 原文链接:http://www.insanelymac.com/forum/index.php?showtopic=281945 需要说明的是,首先这篇文章是针对已经能够成功睡 ...
- sitecore系列教程之Sitecore个性化-配置文件,模式和角色
这是利用Sitecore规则引擎实现数字化转换的三部分系列的第二部分.阅读上一篇文章,通过为您的个性化体验定义内容策略来设置基础. Sitecore有一个非常强大的规则引擎,可以帮助推动个性化的用 ...
- Hive教程之metastore的三种模式
Hive中metastore(元数据存储)的三种方式: 内嵌Derby方式 Local方式 Remote方式 [一].内嵌Derby方式 这个是Hive默认的启动模式,一般用于单元测试,这种存储方式有 ...
- 【转】Android驱动开发之earlysuspend睡眠模式编程总结
原文网址:http://blog.csdn.net/bigapple88/article/details/8669537 (1)添加头文件: #include <linux/earlysuspe ...
随机推荐
- python网络爬虫技术图谱
- Linux 删除文件夹和文件的命令(转载)
Linux 删除文件夹和文件的命令 听语音 | 浏览:93339 | 更新:2013-05-02 18:40 | 标签:linux 文件夹 linux删除目录很简单,很多人还是习惯用rmdir,不过一 ...
- javac之BridgeMethod及泛型擦除重写
When compiling a class or interface that extends a parameterized class or implements a parameterized ...
- bootstrap table 修改table内容时设置表头与表格对齐
第一:取消表头初始化解决表头和内容不对齐问题,取消后表头将不固定. 在你对应的js(bootstrap-table.min.js或bootstrap-table.js,我用的bootstrap-tab ...
- Docker挂载主机目录Docker访问出现Permission denied的解决办法
Docker挂载主机目录,访问相应的文件出现Premission denied的权限访问问题, [root@localhost soft]# docker images REPOSITORY ...
- C++字符串string类常用操作详解(一)【初始化、遍历、连接】
代码示例: #include <iostream> #include "string" using namespace std; //字符串初始化 void strIn ...
- C++中指针和引用、数组之间的区别
指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名,引用初始化后不能改变指向.使用时,引用更加安全,指针更加灵活. 初始化.引用必须初始化,且初始化之后不能呢改变:指针可以不必初始化 ...
- 关于phonegap-plugin-contentsync插件
插件介绍: 作用:下载并缓存远程托管的内容. 地址:https://github.com/phonegap/phonegap-plugin-contentsync 插件支持的平台:Android.IO ...
- BG.Hive - part3
1. Hive数据导入 - Load Load,加载,不会进行任何数据转换和处理的操作,只会进行数据Move操作,将元数据移动到HDFS指定目录 a> hdfs dfs -put 'hdfs的h ...
- c#与IronPython Clojure-clr的调用
一,python 安装ironpython http://ironpython.net/ 新建控制台程序,引入 IronPython,Microsoft.Scripting 新建xxx.py文件 va ...