首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定是否在shell中完成了任何后台进程及其运行时间?

如何确定是否在shell中完成了任何后台进程及其运行时间?
EN

Stack Overflow用户
提问于 2013-10-29 17:29:43
回答 2查看 138关注 0票数 0

我有8个后台进程(也是shell脚本)并行运行,我把它们命名为run1.sh, run2.sh .因此,主要流程如下所示:

代码语言:javascript
复制
#main.sh
./run1.sh &
./run2.sh &
./run3.sh &
...
./run8.sh &

我想确定这8个进程中的每一个是否已经完成,并计算每个进程在完成时经过了多少时间。因此,首先运行run1.sh并不能保证它将首先完成。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-29 19:18:34

当我做类似的事情时,我将进程id保存在一个数组中:

代码语言:javascript
复制
#!/bin/bash

declare -a pids

idx=0
while test $idx -lt 4; do
  ./run.sh &
  pids[$idx]=$!
  idx=$(($idx+1))
done

您还可以设置其他数组以节省启动时间或任何需要跟踪的其他信息。然后设置另一个循环来检查已完成的进程。根据退出条件,将更改此循环。

代码语言:javascript
复制
done=0
while test $done -lt 4; do
  idx=0
  while test $idx -lt 4; do
    pid=${pids[$idx]}
    if [[ $pid -ne 0 ]]; then
      kill -0 $pid
      if [[ $rc -ne 0 ]]; then
        $pids[$idx]=0  # completed.
        done=$((done+1)
      fi
    fi
  done
  sleep 1
done
票数 1
EN

Stack Overflow用户

发布于 2013-10-29 17:36:38

你可以试试:

代码语言:javascript
复制
#main.sh
time ./run1.sh &
time ./run2.sh &
time ./run3.sh &
...
time ./run8.sh &
wait
echo "Done"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19665225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档