Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中同时运行两个作业,每个作业至少运行10次?_Bash_Shell - Fatal编程技术网

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

如何在bash中同时运行两个作业,每个作业至少运行10次?,bash,shell,Bash,Shell,我希望同时开始执行作业1和作业2(例如,./job1&;./job2&;),并在作业完成后立即重新执行作业。当每个作业至少执行10次时,整个任务终止。在脚本的最后,我想打印出两个作业每次执行的执行时间。如何在bash中执行此操作?首先,请注意,不能同时启动两个作业。一个启动,然后另一个启动。如果要跟踪进程的状态,还需要同时运行其他命令。考虑到这一点,您可以这样做: #!/bin/bash #Tested code works :) tries1=0 tries2=0 minTries=10

我希望同时开始执行作业1和作业2(例如,./job1&;./job2&;),并在作业完成后立即重新执行作业。当每个作业至少执行10次时,整个任务终止。在脚本的最后,我想打印出两个作业每次执行的执行时间。如何在bash中执行此操作?

首先,请注意,不能同时启动两个作业。一个启动,然后另一个启动。如果要跟踪进程的状态,还需要同时运行其他命令。考虑到这一点,您可以这样做:

#!/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

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

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

run10 ./job1 & run10 ./job2
wait
没有特别的理由将第二个
run10
放在后台,因为我们想等待第一个
在最后完成


我只是假设
job1
job2
是包装器,它们负责以适当的方式收集时间信息。

如果您提供您已经编写的代码,并询问您遇到问题的代码的特定部分,您的问题会得到很大改善。脚本应该在en作业1和作业2都至少执行10次。因此,如果作业2的运行时间比作业1长得多,则作业1的执行次数应该比作业2多。