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