我有一个脚本监视进程并在进程正在进行时显示(闪烁)“..Please Wait ..” 完成流程后返回“...流程完成”。 如果进程超过120秒,如何终止监视并输出类似“超时”的内容。 - 不终止正在进行的示例流程
#!/usr/bin/ksh
sleep 160 & # Example process
pid=$!
echo 'Getting data\r\c'
sleep 2
while kill -0 $pid 2>/dev/null
do
echo '...Please Wait..\r\c'
sleep 1
echo ' \r\c'
sleep 1
done
echo '...Process complete\r\c'
sleep 2
exit
答案 0 :(得分:1)
如果超时,你应该打破while循环。
...
TIMEOUT=120
START_TIME=`date +%s` # seconds since 1970-01-01 00:00:00 UTC
END_TIME=$(( $START_TIME + $TIMEOUT ))
...
while kill -0 $pid 2>/dev/null; do
#break if current timestamp is greater than precalculated END_TIME
if [ `date +%s` -gt "$END_TIME" ]; then
echo "Timeout"
exit;
fi
...
done
可以选择使用短路评估代替if语句。像这样:
[ `date +%s` -gt "$END_TIME" ] && echo "Timeout" && exit
答案 1 :(得分:0)
感谢大家,我添加了另一个while循环。
#!/usr/bin/ksh
TIMEOUT=15
START_TIME=`date +%s` # seconds since 1970-01-01 00:00:00 UTC
END_TIME=$(( $START_TIME + $TIMEOUT ))
while
do
sleep 60 &
pid=$!
echo 'Getting data\r\c'
sleep 2
while kill -0 $pid 2>/dev/null
do
START_TIME=`date +%s`
echo '...Please Wait..\r\c'
sleep 1
echo ' \r\c'
sleep 1
if [ `date +%s` -gt "$END_TIME" ]; then
echo '...timeout\r\c'
break 2
fi
done
echo '...Process complete\r\c'
sleep 1
break
done