[SHELL] shell 实现多进程后,如何等待所有进程结束

1> 多进程实现 :主要方法是使用 & 符号,将命令fork到后台执行

2>等待结束的方法:

    2.1、使用 wait 命令

#!/bin/bash

sleep 10 && echo "1" >> s.lock &
sleep 12 && echo "1" >> s.lock &
sleep 8  && echo "1" >> s.lock &
while [[ $(cat s.lock | wc -l) < "3" ]]; do
sleep 1
done
echo "over"

    2.2 当你使用for in ; do done的方式创建多进程的时候,用wait 命令会失败,曲线救国方法是建立一个标志,周期检查

#!/bin/bash

set -e 
WAIT_LOCK="/tmp/wait.lock"
wait_it(){
    tmp_lock=$2
    if [[ -f $tmp_lock ]]; then
        rm $tmp_lock
    touch $tmp_lock
    #数文件记录,只要记录数大于等于进程数,表明运行结束
    while [[ $(cat $tmp_lock | wc -l) < $1 ]]; do
        echo "*"
        sleep 10
    done
}

#打开10个进程,每个进程成功就向文件追加一条记录
for i in {1..10}; do echo $i ; ( sleep $i && echo "1" >> $WAIT_LOCK & ); done
wait_it 10 $WAIT_LOCK
echo "Over!"

猜你喜欢

转载自blog.csdn.net/zeli1511/article/details/81587108
今日推荐