免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7809 | 回复: 12
打印 上一主题 下一主题

wait -- 子进程正常结束的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-04 13:46 |只看该作者 |倒序浏览
假设有脚本a,需要依次调用脚本b和c,如何判断c已正常结束?
c && wait -- 好像需要等到b也结束才终止,怎样wait才能单独判断c结束呢?

论坛徽章:
0
2 [报告]
发表于 2008-12-04 14:54 |只看该作者
有人知道吗?
或者给wait说明的链接,谢谢!

论坛徽章:
0
3 [报告]
发表于 2008-12-04 15:00 |只看该作者
不太明白你的意思,
c && wait   和  直接  c  有何区别

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2008-12-04 15:03 |只看该作者
&和&&表示的意思是不一样的

论坛徽章:
0
5 [报告]
发表于 2008-12-04 15:19 |只看该作者
脚本a大致是这样的
#!/bin/sh
b&              #b是个循环,一直在后台执行,
c && wait   #c是个较为复杂的脚本程序,用wait是为了确定c已正常结束在往下执行

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
6 [报告]
发表于 2008-12-04 15:41 |只看该作者
你没弄明白wait是干嘛的吧?

论坛徽章:
0
7 [报告]
发表于 2008-12-04 15:45 |只看该作者
你说说^

论坛徽章:
0
8 [报告]
发表于 2008-12-04 15:47 |只看该作者
你的目的就是c 正常结束才往下执行是吗?
b &
c  || exit
nextcmd1
nextcmd2
...

论坛徽章:
0
9 [报告]
发表于 2008-12-04 16:12 |只看该作者
jobs

        在后台列出所有正在运行的作业,给出作业号.



        注意: 进程和作业的概念太容易混淆了.特定的内建命令,比如kill,disown和wait即可以

                接受一个作业号作为参数也可以接受一个作为参数.但是fg,bg和jobs命令只能接受

                作业号作为参数.

                bash$ sleep 100 &

                [1] 1384



                bash $ jobs

                [1]+  Running                 sleep 100 &



                注意: "1"是作业号(作业是被当前shell所维护的),而"1384"是进程号(进程是被系统

                        维护的).为了kill掉作业/进程,或者使用 kill %1命令或者使用kill 1384命令,

                        这两个命令都可以.

wait

        停止脚本的运行,直到后台运行的所有作业都结束为止,或者直到指定作业号或进程号为选

        项的作业结束为止.



        你可以使用wait命令来防止在后台作业没完成(这会产生一个孤儿进程)之前退出脚本.


  1. 1 #!/bin/bash

  2. 2

  3. 3 ROOT_UID=0   # 只有$UID 为0的用户才拥有root权限.

  4. 4 E_NOTROOT=65

  5. 5 E_NOPARAMS=66

  6. 6

  7. 7 if [ "$UID" -ne "$ROOT_UID" ]

  8. 8 then

  9. 9   echo "Must be root to run this script."

  10. 10   # "Run along kid, it's past your bedtime."

  11. 11   exit $E_NOTROOT

  12. 12 fi

  13. 13

  14. 14 if [ -z "$1" ]

  15. 15 then

  16. 16   echo "Usage: `basename $0` find-string"

  17. 17   exit $E_NOPARAMS

  18. 18 fi

  19. 19

  20. 20

  21. 21 echo "Updating 'locate' database..."

  22. 22 echo "This may take a while."

  23. 23 updatedb /usr &     # 必须使用root身份来运行.

  24. 24

  25. 25 wait

  26. 26 # 将不会继续向下运行,除非 'updatedb'命令执行完成.

  27. 27 # 你希望在查找文件名之前更新database.

  28. 28

  29. 29 locate $1

  30. 30

  31. 31 #  如果没有'wait'命令的话,而且在比较糟的情况下,

  32. 32 #+ 脚本可能在'updatedb'命令还在运行的时候退出,

  33. 33 #+ 这将会导致'updatedb'成为一个孤儿进程.

  34. 34

  35. 35 exit 0
复制代码

wait 也可以接受一个作业标识符作为参数,比如,wait %1或wait $PPID.见"作业标识

        符表".

[ 本帖最后由 smallstar001 于 2008-12-4 16:13 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-12-04 16:19 |只看该作者
你的意思是c执行结果出错就exit吧,这样能保证c能正常结束吗,我就碰到过c在执行过程中未执行完的情况才用wait的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP