加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:10:55 所属栏目:安全 来源:网络整理
导读:我有一个脚本,尝试使用另一个程序进行数据库连接,程序的超时(2.5分钟)是长的。我想将此功能添加到脚本。 如果连接需要更长的时间5秒钟,可以杀死进程 否则杀死睡眠/杀死过程。 我遇到的问题是bash如何在进程被杀死时报告,这是因为进程在同一个shell中只是
我有一个脚本,尝试使用另一个程序进行数据库连接,程序的超时(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秒超时或任何时间),所以等待停止,一旦您的命令退出正常(并杀死“杀手”,因为它不再需要了
>该命令锁定,杀手最终杀死命令

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读