以编程方式查询Linux机器的电源状态

时间:2014-12-23 03:04:37

标签: c++ c linux

在Windows(R)机器上,可以使用以下功能查询机器的系统电源状态:

BOOL WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS lpSystemPowerStatus);

Linux机器有类似的东西吗?

2 个答案:

答案 0 :(得分:2)

在大多数Linux系统上,名为acpid的守护程序一直运行监视ACPI事件,并且通常将信息记录到/ var / log / acpid或/ var / log / messages。 http://linux.die.net/man/8/acpid有一个联机帮助页。 acpid将当前的ACPI信息存储在/ proc / acpi中,尽管它被重新定位到/ sys某处并且/ sys / power / state通过捕获它来保持当前的电源状态(cat / sys / power / state)。有关ACPI的更多信息,请访问http://acpi.sourceforge.net/documentation/sleep.html。 JCM在http://sourceforge.net/projects/acpitool/提到了一个名为AcpiTool的ACPI状态监控命令行工具。我在CentOS上构建它,它工作正常。只需按照其INSTALL文件中的说明进行安装即可 - 它需要一个C ++编译器,它通常在Linux上,或者如果没有使用yum或apt安装。

dmidecode可针对包括系统电源和控件在内的低级问题进行多种查询,请参阅http://linux.die.net/man/8/dmidecode

与freedesktop.org合作开发RedHat并提供从RH7开始称为UPower的DeviceKit-power RH7。它由一个守护进程和命令行工具组成。它的联机帮助页位于http://www.pkill.info/linux/man/1-upower/。命令行工具的--dump选项提供了一些有用的信息,但很少是最新的。也许重启守护进程会导致更新。以下是CentOS 6主机输出的示例:

ca:17: devkit-power --dump
Device: /org/freedesktop/DeviceKit/Power/devices/line_power_ACAD
  native-path:          /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ACAD
  power supply:         yes
  updated:              Tue Dec 23 20:28:27 2014 (866 seconds ago)
  has history:          no
  has statistics:       no
  line-power
    online:             yes

Daemon:
  daemon-version:  014
  can-suspend:     no
  can-hibernate    yes
  on-battery:      no
  on-low-battery:  no
  lid-is-closed:   no
  lid-is-present:   no

戴尔和惠普等大多数主要PC厂商都提供自己的电源管理和监控应用程序,我发现最好使用它们,因为他们知道如何查询设计到硬件中的自定义探针并打印完整诊断为他们的支持团队。

答案 1 :(得分:1)

在我的 Ubuntu 系统上,我在 /sys/class/power_suply/ADP1/online 中找到了此信息。

例如,我在 If 语句的脚本中使用了它,代码如下:

if (( CPUBenutzung > 11 )) || ! (( $(cat /sys/class/power_suply/ADP1/online) )); then Stopmining ; fi

对我来说,这很好用,并且在没有连接电源时总是停止挖矿过程,或者我确实出于其他原因使用了笔记本的所有 12 个线程。