有没有办法防止 Windows 在命令行或使用 cygwin 运行程序时进入睡眠模式?理想情况下,我希望有这样的东西:
nosleep myscript.sh
背景
有时我会启动长时间运行的作业,例如手动备份或大型文件传输,但我发现 Windows 经常在这些作业完成之前进入睡眠状态。我希望能够启动命令并在命令运行时阻止进入睡眠模式,但命令完成后让它自动再次工作。
答案1
您可以powercfg
在脚本中使用来更改 PC 等待进入睡眠状态的时间:
永不进入待机状态:
powercfg -change -standby-timeout-ac 0
15分钟后进入待机状态:
powercfg -change -standby-timeout-ac 15
答案2
这是我根据 harrymc 的回复编写的 bash 脚本。
#!/usr/bin/bash
# NAME
# nosleep - prevent sleep and hibernation while running a command
#
# SYNOPSIS
# nosleep COMMAND [ARG]...
# Make sure the power scheme gets restored, even if Ctrl-C happens
cleanup()
{
powercfg -setactive $SCHEME_GUID
powercfg -delete $TMP_GUID
return $?
}
trap cleanup SIGINT
# Disable sleep and hibernate timers
export SCHEME_GUID=`powercfg -getactivescheme | gawk '{ print $4 }'`
export TMP_GUID=`powercfg -duplicatescheme $SCHEME_GUID | gawk '{ print $4 }'`
if [[ -z $TMP_GUID ]]; then
echo "ERROR: could not duplicate the current power scheme"
exit 254
fi
powercfg -setactive $TMP_GUID
powercfg -changename $TMP_GUID nosleep "temporary scheme for disabling sleep and hibernation"
powercfg -change -standby-timeout-ac 0
powercfg -change -hibernate-timeout-ac 0
# Run the command
"$@"
powercfg -setactive $SCHEME_GUID
powercfg -delete $TMP_GUID
答案3
现在有这样一个nosleep
Cygwin 中的命令。只需安装nosleep
包并运行
nosleep myscript.sh
由 Andrew E. Schulman 于 2011 年撰写。参见https://cygwin.com/ml/cygwin/2011-09/msg00151.html
来源在启动板上。它使用SetThreadExecutionState()
(像 Insomnia 已经提到的那样),不创建单独的电源方案。
Usage: nosleep [OPTION...] command [args]
Run a command while inhibiting computer sleep or hibernation.
-a, --awaymode Force away mode instead of sleep mode
-d, --display Keep the display on
-i, --ifacpower Following options only apply if AC power is on
-?, --help give this help list
--usage give a short usage message
-V, --version print program version
Report bugs to the Cygwin mailing list <[email protected]>.
请注意,这会阻止系统自动地空闲时进入睡眠状态,而不是在用户要求时系统进入睡眠状态(例如关闭笔记本电脑盖时)。
答案4
失眠防止你的窗户进入睡眠状态,但它不是一个命令行工具,所以你的脚本与 harrymc 命令是更好的解决方案