基础来自
补充一个实验
所以说要等待子进程的执行情况就得嵌套进去的所有子进程对其子进程加上wait。
- #!/bin/sh
- sh sleep10.sh &
- pid1=$!
- echo "pid1 is $pid1"
- sh sleep20.sh &
- pid2=$!
- echo "pid2 is $pid2"
- wait $pid1
- ret1=$?
- echo "ret1 is $ret1"
- wait $pid2
- ret2=$?
- echo "ret2 is $ret2"
- sleep 3
- echo "Father"
- #!/bin/sh
- sh call_sleep10.sh
- #!/bin/sh
- sleep 10 &
- sleep 10 &
- sleep 10 &
- sleep 10 &
这种情况下,wait_pid.sh是不会等待10秒,因为call_sleep10.sh会马上返回。
这样,对call_sleep10.sh的所有命令,也需要加上wait操作
- #!/bin/sh
- sleep 10 &
- pid1=$!
- sleep 10 &
- pid2=$!
- sleep 10 &
- pid3=$!
- sleep 10 &
- pid4=$!
- wait $pid1
- wait $pid2
- wait $pid3
- wait $pid4
再来一个实验
用循环来运行和等待
- #!/bin/sh
- pidIndex=("pid1" "pid2" "pid3" "pid4" "pid5")
- i=0
- length=5
- array=()
- while [ $i -lt $length ]
- do
- time=$((10-i))
- sleep $time &
- pid=$!
- array=("${array[@]}" $pid)
- let i++
- echo $i
- done
- j=0
- while [ $j -lt $length ]
- do
- echo ${array[$j]}
- wait ${array[$j]}
- ret=$?
- echo "ret is:"$ret
- let j++
- done
做了小小的变化,一个利用循环,第二个把时间倒序,也就是说后面的子进程结束得更早,想看看是否还是能收到结束的信息,答案是可以的。第一个wait到后,后面的马上也wait到了,而且ret正确。
阅读(2468) | 评论(0) | 转发(0) |