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!"