【问题标题】:Instant power off programmatically?以编程方式即时关闭电源?
【发布时间】:2013-03-26 11:34:58
【问题描述】:

在网络环境中的 Windows XP Pro 下,Ctrl+Alt+Del 会为您提供 Windows 安全提示,如果您按住 Ctrl 并单击关机,则会触发紧急关机。

这似乎将系统关闭得如此之快,以至于进程甚至都没有完成,即几乎就像您刚刚拉下电源/长按电源按钮一样。

我想知道 Windows 是通过什么过程实现如此快速的关机 - 它是直接通过 ACPI/APM 指示 BIOS 关闭系统吗?如果是这样,如何以任何语言以编程方式实现这一点?

【问题讨论】:

    标签: acpi


    【解决方案1】:

    这可以通过使用系统请求功能在 *nix 系统上完成。通常出于安全原因禁用此功能,但您可以使用 root 权限启用它并立即请求系统断电,如下所示:

    echo 1 > /proc/sys/kernel/sysrq-trigger ;
    echo o > /proc/sysrq-trigger
    

    字母“o”的意思是“关机”。其他功能可用。 https://en.wikipedia.org/wiki/Magic_SysRq_key

    【讨论】:

      【解决方案2】:

      ExitWindowsEx 功能是标准关闭功能,即使使用EWX_FORCE,它仍然会关闭所有程序、服务等...它只是不询问/等待它们关闭。

      那么解决方法是什么? 使用NtShutdownSystem

      该函数通过刷新缓存、注册表等,然后调用 BIOS 来关闭机器,从而实现真正的关机。

      在此处查看用法示例:
      http://www.codeproject.com/Articles/34194/Performing-emergency-shutdowns

      【讨论】:

        【解决方案3】:

        您可以使用 ExitWindowsExEWX_POWEROFFEWX_FORCE 标志设置...

        【讨论】:

        • 谢谢 Yahia,你知道在 Unix 或其他操作系统中实现它吗?
        • @deed02392 这取决于您使用的 Unix 以及您的进程在其下运行的权限...
        • 我感兴趣的主要是在 FreeBSD 和 Debian (Xen/OpenVZ) 中对此的支持。我希望能得到一个关于它是如何实现的通用解释,这样我就可以自己进一步阅读特定的操作系统。
        • @deed02392 Xen/OpenVZ 是一个非常特殊的情况,因为关闭等操作由虚拟化层处理,甚至可能以“标准方式”被禁止...
        • 我不认为它有显着差异,除非在 OpenVZ 中尝试直接使用“标准方式”可能实际上引用了主机。在这种情况下很好,我不会在我的解决方案中使用 OpenVZ,但我想知道如何通过尽可能直接地命令硬件来以编程方式关闭 *nix 机器以移除电源。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多