bash - 在设定的超时后终止一个子进程
问题描述:
我希望有人能够帮我解决这个问题 我需要一个shell脚本的循环来运行循环中的内容15秒。所以例如bash - 在设定的超时后终止一个子进程
if (true)
run command for 15 seconds
fi
kill PID
我是新的shell脚本,所以我失去了这一点。 另外我使用的是Debian instll如果让任何区别
任何帮助表示赞赏
答
下面的bash脚本可能适合你。该脚本将在开始循环之前将初始时间点设置为变量。当循环运行时,一个额外的变量将被设置为当前的历元时间。两个时代将进行比较,只要差异小于或等于15,您的命令将继续运行。请注意,在下面的脚本中,当前运行的命令是'echo',计数$ {COUNTER}“'。您应该更改脚本的这一部分以匹配您正在尝试完成的内容。一旦两个时代的差异大于15,剧本将退出。此时您需要启动kill命令。如果发生错误,您应该在“YourLogFile”中看到“ERROR ... YourScript.sh失败”(将您的日志文件设置为所需内容)
注意:无论您在此循环中尝试运行在15秒内跑很多次。通过使用下面的脚本作为测试,您将看到echo命令每秒运行超过50次。
#!/bin/bash
LOOP="true"
INITIAL_TIME=$(date "+%s")
while [[ ${LOOP} == true ]]; do
CURRENT_TIME=$(date "+%s")
COUNTER=$(expr ${CURRENT_TIME} - ${INITIAL_TIME})
if [[ ${COUNTER} -le "15" ]]; then
echo "counting ${COUNTER}"
# RUN YOUR COMMAND IN PLACE OF THE ABOVE echo COMMAND
elif [[ ${COUNTER} -gt "15" ]]; then
exit 0
#INITIATE YOUR KILL COMMAND IN PLACE OF OR BEFORE THE exit
else
echo "ERROR... YourScript.sh failed" >> /YourLogFile
fi
done
+0
这个命令替换'echo'计数$ {COUNTER}“'会阻塞并且不终止 - 比如通过慢速连接下载一个长视频。 – 2012-04-23 16:55:17
参见[猛砸http://*.com/questions/526782/how-do-i-limit-the-running-time-of-a-bash-script/526815#526815 – paxdiablo 2012-04-23 08:45:12
可能重复在给定的超时后杀死子进程的脚本](http://*.com/questions/5161193/bash-script-that-kills-a-child-process-after-a-given-timeout) – 2012-04-23 15:53:16