杀死过程后给定时间的bash?

前端之家收集整理的这篇文章主要介绍了杀死过程后给定时间的bash?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个脚本,尝试使用另一个程序进行数据库连接,程序的超时(2.5分钟)是长的。我想将此功能添加到脚本。

如果连接需要更长的时间5秒钟,可以杀死进程
否则杀死睡眠/杀死过程。

我遇到的问题是bash如何在进程被杀死时报告,这是因为进程在同一个shell中只是背景。有没有更好的方法来做到这一点,或者如何使shell命令的安静呢?

DB_CONNECTION_PROGRAM > $CONNECTFILE &
pid=$! 
(sleep 5; kill $pid) &
sleep_pid=$!
wait $pid

# If the DB Failed to connect after 5 seconds and was killed
status=$? #Kill returns 128+n (fatal error)
if [ $status -gt 128 ]; then
    no_connection="ERROR: Timeout while trying to connect to $dbserver"
else # If it connected kill the sleep and any errors collect
    kill $sleep_pid
    no_connection=`sed -n '/^ERROR:/,$p' $CONNECTFILE`
fi
我不知道它是否相同,但几年前我确实已经解决了类似的问题。不过我是一个程序员,而不是像Unix一样的系统管理员,所以采取以下一些盐,因为我的Bash-fu可能不是那么强大…

基本上我做叉子,叉子和叉子)

内存不足建立我的旧代码(我惊讶地仍然使用每天),因为我的记忆不够好,在Bash它的工作有点像这样:

commandThatMayHang.sh 2 > /dev/null 2>&1 &    (notice that last '&',we're forking)
MAYBE_HUNG_PID=$!
sleepAndMaybeKill.sh $MAYBE_HUNG_PID 2 > /dev/null 2>&1 &   (we're forking again)
SLEEP_AND_MAYBE_KILL_PID=$!   
wait $MAYBE_HUNG_PID > /dev/null 2>&1
if [ $? -eq 0 ]
    # commandThatMayHand.sh did not hang,fine,no need to monitor it anymore
    kill -9 $SLEEP_AND_MAYBE_KILL 2> /dev/null 2>&1
fi

其中sleepAndMaybeKill.sh睡眠所需的时间,然后杀死commandThatMayHand.sh。

所以基本上这两种情况是:

>你的命令退出正常(超过5秒超时或任何时间),所以等待停止,一旦您的命令退出正常(并杀死“杀手”,因为它不再需要了
>该命令锁定,杀手最终杀死命令

无论如何,一旦命令完成,您就可以成功,或者在超时后失败。

猜你在找的Bash相关文章