bash – 启动并监视shell脚本中的进程以完成

我有一个简单的 shell脚本,它也在下面:

#!/usr/bin/sh

echo "starting the process which is a c++ process which does some database action for around 30 minutes"
#this below process should be run in the background
<binary name> <arg1> <arg2>

exit

现在我想要的是监控和显示过程的状态信息.
我不想深入了解它的功能.由于我知道该过程将在30分钟内完成,我想向用户显示每1分钟完成3.3%并且还检查过程是否在后台运行,最后如果过程完成我想要显示它完成了.

有人可以帮帮我吗?

解决方法

你能做的最好的事情就是在你的应用程序中加入某种仪器,
并让它报告处理的工作项目/工作总量方面的实际进展情况.

如果做不到这一点,你确实可以参考物品运行的时间.

这是我过去使用的样本.适用于ksh93和bash.

#! /bin/ksh
set -u
prog_under_test="sleep"
args_for_prog=30

max=30 interval=1 n=0

main() {
    ($prog_under_test $args_for_prog) & pid=$! t0=$SECONDS

    while is_running $pid; do
        sleep $interval
        (( delta_t = SECONDS-t0 ))
        (( percent=100*delta_t/max ))
        report_progress $percent
    done
    echo
}

is_running() { (kill -0 ${1:?is_running: missing process ID}) 2>& -; }

function report_progress { typeset percent=$1
    printf "\r%5.1f %% complete (est.)  " $(( percent ))
}

main

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...