如何同时运行两个工作,每个工作至少10次bash?

时间:2014-10-14 21:54:34

标签: bash shell

我想同时开始执行job1和job2(例如./job1&amp ;; ./job2& amp ;;)并在完成后立即重新执行作业。当每个作业执行至少10次时,整个任务终止。在脚本结束时,我想打印两个作业的每次执行的执行时间。我怎么能用bash来做呢?

2 个答案:

答案 0 :(得分:1)

首先,请注意您无法在同一时间启动两个作业。一个将开始,然后另一个将开始。如果要跟踪进程的状态,则还需要在此期间运行其他命令。考虑到这一点,你可以做这样的事情:

#!/bin/bash
#Tested code works :)

tries1=0
tries2=0
minTries=10

pid1='null'
pid2='null'

while [[ $tries1 -lt $minTries || $tries2 -lt $minTries ]]
do
    if [[ ! -d "/proc/${pid1}" ]]
    then
        time ./job1 &
        pid1=$!
        tries1=$((tries1+1))
        echo "1 - $pid1 - $tries1"
    fi
    if [[ ! -d "/proc/${pid2}" ]]
    then
        time ./job2 &
        pid2=$!
        tries2=$((tries2+1))
        echo "2 - $pid2 - $tries2"
    fi
done

答案 1 :(得分:1)

如果您将问题重述为“从(大约)同时开始,按顺序运行10个job1个实例,并依次运行10个job2个实例,那么事情就不那么复杂了。

run10 () {
    local i
    for i in $(seq 0 9); do
        "$1"
    done
}

run10 ./job1 & run10 ./job2
wait

没有特别的理由将第二个run10放在后台,因为我们希望wait让第一个人在最后完成。

我只是假设job1job2是包装器,它们以合适的方式处理时间信息。