Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88706
  • 博文数量: 16
  • 博客积分: 356
  • 博客等级: 一等列兵
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-13 21:09
文章分类

全部博文(16)

文章存档

2012年(16)

我的朋友

分类: LINUX

2012-08-07 17:22:43

基础来自

补充一个实验
所以说要等待子进程的执行情况就得嵌套进去的所有子进程对其子进程加上wait。


wait_pid.sh

  1. #!/bin/sh
  2. sh sleep10.sh &
  3. pid1=$!
  4. echo "pid1 is $pid1"
  5. sh sleep20.sh &
  6. pid2=$!
  7. echo "pid2 is $pid2"
  8. wait $pid1
  9. ret1=$?
  10. echo "ret1 is $ret1"
  11. wait $pid2
  12. ret2=$?
  13. echo "ret2 is $ret2"
  14. sleep 3
  15. echo "Father"

sleep20.sh

  1. #!/bin/sh
  2. sleep 20

sheep10.sh

  1. #!/bin/sh
  2. sh call_sleep10.sh

call_sleep10.sh

  1. #!/bin/sh
  2. sleep 10 &
  3. sleep 10 &
  4. sleep 10 &
  5. sleep 10 &
这种情况下,wait_pid.sh是不会等待10秒,因为call_sleep10.sh会马上返回。
这样,对call_sleep10.sh的所有命令,也需要加上wait操作

call_sleep10.sh

  1. #!/bin/sh
  2. sleep 10 &
  3. pid1=$!
  4. sleep 10 &
  5. pid2=$!
  6. sleep 10 &
  7. pid3=$!
  8. sleep 10 &
  9. pid4=$!
  10. wait $pid1
  11. wait $pid2
  12. wait $pid3
  13. wait $pid4
再来一个实验
用循环来运行和等待

点击(此处)折叠或打开

  1. #!/bin/sh
  2. pidIndex=("pid1" "pid2" "pid3" "pid4" "pid5")
  3. i=0
  4. length=5
  5. array=()
  6. while [ $i -lt $length ]
  7. do
  8. time=$((10-i))
  9. sleep $time &
  10. pid=$!
  11. array=("${array[@]}" $pid)
  12. let i++
  13. echo $i
  14. done
  15. j=0
  16. while [ $j -lt $length ]
  17. do
  18. echo ${array[$j]}
  19. wait ${array[$j]}
  20. ret=$?
  21. echo "ret is:"$ret
  22. let j++
  23. done
做了小小的变化,一个利用循环,第二个把时间倒序,也就是说后面的子进程结束得更早,想看看是否还是能收到结束的信息,答案是可以的。第一个wait到后,后面的马上也wait到了,而且ret正确。



阅读(2468) | 评论(0) | 转发(0) |
0

上一篇:python参数传递

下一篇:错误记录

给主人留下些什么吧!~~