if err := exec.Command("cmd", "/C", "shutdown", "/s").Run(); err != nil {
fmt.Println("Failed to initiate shutdown:", err)
}
字符串 上面的命令启动了一个关机序列,通常需要1分钟才能真正关闭系统(并且有空间使用shutdown /a中止它)。您可以为shutdown命令提供不同的参数,以便不等待1分钟,而是立即继续:shutdown /t 0 /s(执行shutdown /?以获取所有选项的列表)。 还有一个Windows API调用来关闭系统:ExitWindowsEx()。它有两个参数,第一个是定义关机类型的标志(0x08表示Shuts down the system and turns off the power.),第二个是提供关机的原因。要从Go调用它,你可以这样做:
2条答案
按热度按时间wgx48brx1#
syscall
包中没有“关闭操作系统”功能,因为所有操作系统都没有为此提供通用接口。注意:有一个
syscall.Shutdown()
功能,但那是shutdown a socket,而不是关闭操作系统。最简单的方法是使用
os/exec
包执行shutdown
命令,例如:字符串
上面的命令启动了一个关机序列,通常需要1分钟才能真正关闭系统(并且有空间使用
shutdown /a
中止它)。您可以为shutdown
命令提供不同的参数,以便不等待1分钟,而是立即继续:shutdown /t 0 /s
(执行shutdown /?
以获取所有选项的列表)。还有一个Windows API调用来关闭系统:
ExitWindowsEx()
。它有两个参数,第一个是定义关机类型的标志(0x08
表示Shuts down the system and turns off the power.
),第二个是提供关机的原因。要从Go调用它,你可以这样做:型
但是要知道你需要
SE_SHUTDOWN_NAME
权限才能调用ExitWindowsEx()
,否则你会得到一个错误消息:型
请参见此示例how to acquire the required privilege。
1cosmwyk2#
谢谢你的帖子,非常有帮助。下面是执行重新引导完整函数。它完全遵循前面提到的Microsoft示例。应该有助于节省计算结构体的时间:
字符串