本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-suspend-then-hibernate.service, systemd-sleep — 系统休眠逻辑
systemd-suspend.service
systemd-hibernate.service
systemd-hybrid-sleep.service
systemd-suspend-then-hibernate.service
/usr/lib/systemd/system-sleep
systemd-suspend.service
是一个被
suspend.target
引用的系统服务,
用于执行实际的休眠到内存操作。
systemd-hibernate.service
是一个被
hibernate.target
引用的系统服务,
用于执行实际的休眠到硬盘操作。
systemd-hybrid-sleep.service
是一个被
hybrid-sleep.target
、
suspend-then-hibernate.target
引用的系统服务,
用于执行实际的混合休眠(既到内存又到硬盘)操作、
递进休眠(先休眠到内存超时后再休眠到硬盘)操作。
在实际执行休眠动作之前,
systemd-suspend.service
(或其他对应的服务)
将会运行
/usr/lib/systemd/system-sleep/
目录中的所有可执行文件,
并向这些可执行文件传递两个参数。第一个参数是
"pre
" 、第二个参数根据所要执行的动作是
"suspend
", "hibernate
",
"hybrid-sleep
", "suspend-then-hibernate
"
之一。
在从休眠状态恢复之前,systemd-suspend.service
(或其他对应的服务)
同样会运行这些可执行文件,并将第一个参数改为
"post
" 之后传递过去。目录中的所有可执行文件都以并行的方式被同时调用,
并仅在所有这些可执行文件退出之后,
才会真正实际执行休眠动作。
注意,
/usr/lib/systemd/system-sleep/
中的可执行文件
仅供这里列出的休眠服务使用,并且应该被视为一种 hack 技巧。
如果应用程序想要响应系统的休眠与恢复通知,
那么应该使用 Inhibitor
interface 。
注意,千万不要直接执行
systemd-suspend.service
,
systemd-hibernate.service
,
systemd-hybrid-sleep.service
,
systemd-suspend-then-hibernate.service
单元。而是应该使用例如
"systemctl suspend
"
这样的命令来触发休眠。
从内部看,这些服务将一个类似
"mem
" 这样的字符串写入 /sys/power/state
中,
以触发实际的系统休眠动作。
究竟写入什么样的字符串取决于
/etc/systemd/sleep.conf
或
sleep.conf.d
中的配置文件的 "[Sleep]
" 小节的设置。
详见 systemd-sleep.conf(5) 手册。