我有8个后台进程(也是shell脚本)并行运行,我把它们命名为run1.sh, run2.sh .因此,主要流程如下所示:
#main.sh
./run1.sh &
./run2.sh &
./run3.sh &
...
./run8.sh &我想确定这8个进程中的每一个是否已经完成,并计算每个进程在完成时经过了多少时间。因此,首先运行run1.sh并不能保证它将首先完成。
发布于 2013-10-29 19:18:34
当我做类似的事情时,我将进程id保存在一个数组中:
#!/bin/bash
declare -a pids
idx=0
while test $idx -lt 4; do
./run.sh &
pids[$idx]=$!
idx=$(($idx+1))
done您还可以设置其他数组以节省启动时间或任何需要跟踪的其他信息。然后设置另一个循环来检查已完成的进程。根据退出条件,将更改此循环。
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发布于 2013-10-29 17:36:38
你可以试试:
#main.sh
time ./run1.sh &
time ./run2.sh &
time ./run3.sh &
...
time ./run8.sh &
wait
echo "Done"https://stackoverflow.com/questions/19665225
复制相似问题