unix 如何在bash中设置时间限制

dzjeubhm  于 2023-10-18  发布在  Unix
关注(0)|答案(4)|浏览(142)

我在bash中创建了一个简单的问答游戏。我想在一定的时间限制下运行这个问题。如何做到这一点?Tia
我尝试使用这个命令:

sleep 2m && kill $$ &

但它会终止整个脚本。另外:我想显示一个“times up”短语

laximzn5

laximzn51#

与最初的尝试类似,考虑创建一个休眠并发送信号的子进程,但这次是one that you catch

handle_hup() {
  echo "Times up"
  # do more things
}

trap handle_hup SIGHUP

mypid=$$
(sleep 2m && kill -HUP $mypid)&

echo "Quiz question: ..."
e0uiprwp

e0uiprwp2#

timeout命令可以执行您想要的操作。例如

$ timeout 120 your-game-command

您可以检查退出状态,以了解命令是否按照文档超时:
如果命令超时,则以状态124退出

djmepvbi

djmepvbi3#

由于您没有显示完整的代码或需求,因此在这里只提供一小段代码,它将等待用户输入10秒,否则它将打印用户超时,您可以将其作为启动点,并可以相应地调整到您的脚本中。

read -t 10 -p "User, please enter your Input or it will time out in 10 seconds." ; echo ; date
q3aa0525

q3aa05254#

我遇到了一个问题,超时需要导出许多函数和变量。与其把我的整个环境...
我发现下面的超时配置更简单:

MyFunction "${MyArguments[@]}" & # trailing ampersand (&) causes MyFunction to execute in background (with current environment)
zPid="$!" # bash $! provides the most recent background process id
timeout 2s bash -c wait $zPid # wait for MyFunction to finish (timeout after 2 seconds)
if [[ 124 = "$?" ]]; then # see man timeout for other error codes
   echo "MyFunction timed out."
fi

相关问题