Linux (Debian) 机器上的 sleep 是如何工作的?我通常不使用带有键盘和鼠标的盒子。我通常通过 SSH 连接到它。它是否处于睡眠状态,但当我连接到它时“醒来”?
如果我正在运行网络服务器怎么办?它会休眠直到 GET 请求到达,然后醒来,还是会在休眠时忽略传入的数据包?
我有一个我不想暂停的后台进程。如何从命令行检查睡眠设置是什么?
“电源管理”能力如何决定何时休眠、何时不休眠?它是否会查看正在运行的进程,并根据这些进程的内容以某种方式决定休眠?
答案1
这是一个很大的话题。从...开始ACPI
(高级配置和电源接口)。自 2000 年代初以来,它就随 Linux 提供。
简而言之,它是通过 BIOS 进行管理的,BIOS 可以配置为检查连接到计算机的设备上的活动,并使用它来触发 CPU 唤醒。
- 了解暂停(Ubuntu 维基百科)
- ACPI:高级配置和电源接口(Linux 指南)
- 电源管理如何工作?
可以在网络活动时唤醒(尽管典型的 Debian 系统可能没有为此进行配置)。对于相关主题,请参阅
- 局域网唤醒(Debian 维基)。
在此页面的底部,列出了各种工具的手册页链接,这些工具可能对你有用(像往常一样,你的具体的配置决定了哪些是有用的):
以太网工具(8),以太唤醒(8),唤醒兰(1) - 操作方法:使用 Linux 命令唤醒计算机 [ LAN 唤醒 ( WOL ) ]
答案2
正如 Thomas Dickey 所说,电源管理是一个相当多层次的事情。他主要涵盖了低级/硬件接口方面,但我认为您对更高级别的安排更感兴趣。
在用户视角的最底层,有一个powermgmt-base
包,它只包含一些脚本,如/sbin/acpi_available
、/sbin/apm_available
和/usr/bin/on_ac_power
,可用于确定其他脚本中的当前电源状态和一般 ACPI/APM 功能。
最重要的是upower
,它通常是用户会话和电源管理框架之间的现代接口。它通过 D-Bus 进行通信。它使用包中的工具和脚本pm-utils
来实际触发电源管理操作,例如挂起到 RAM 或睡眠,并使用 PolicyKit(包policykit-1
)来决定允许谁和/或什么来发出此类操作的命令。
除此之外upower
,还有gnome-power-manager
(Gnome)、powerdevil
(KDE)或sleepd
(以上都不是/可选)实际上会根据需要触发电源管理操作。
该pm-utils
包可以使用各种包中的许多工具(例如hibernate
、uswsusp
、等ethtool
)来执行其操作。它还具有许多用于定制的钩子:这些钩子可用于在睡眠/唤醒时执行操作,或停止不需要的睡眠操作。hdparm
cpufrequtils
通常,Web 服务器在等待客户端时不会在电源管理意义上休眠:尽管如此,它肯定会在 CPU 降频的情况下空闲,而无事可做。从睡眠模式唤醒需要一些时间,这可能会导致 Web 服务出现过多的额外延迟。但如果您特别需要,您的网卡可能会在检测到流量时将您的系统从睡眠模式(甚至完全关闭)唤醒:查看ethtool <network interface> | grep Wake-on
您的网卡支持哪些唤醒功能。
upower --dump
将列出电源管理了解的所有电池、显示器和其他相关内容:在我的桌面上,它甚至了解我的无线鼠标的电池状态。
如果您的系统不包含gnome-power-manager
、powerdevil
或sleepd
,那么我认为它在任何情况下都不会自动进入睡眠状态(笔记本电脑/UPS 电池电量可能严重不足除外)。这些组件可以根据其配置的电源策略决定自行使系统进入睡眠状态。您应该查看这些组件的文档,无论它们中的哪一个适用于您的系统。