免费注册 查看新帖 |

Chinaunix

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

如何获取后台子进程的退出状态? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-16 09:54 |只看该作者 |倒序浏览
请教一下,如何获取后台子进程的退出状态?
比如如下脚本
#!/bin/bash
i=0
j=0
command是一数组
while true
do
while (( $i<${#command
  • }))
    do
      ssh host command[${i}] &   #我想怎么获取这个进程的退出状态
      let i++
    done
    let j++
    if [ $j -lt 3 ];then
        break
    fi
    done
    我意思是,我想在一机器上同时3次运行某一命令,然后在主进程分别获取他们的退出状态
    谢谢

    [ 本帖最后由 Mikeshew.ca 于 2006-11-23 20:20 编辑 ]
  • 论坛徽章:
    0
    2 [报告]
    发表于 2006-11-16 14:05 |只看该作者
    echo $?

    论坛徽章:
    0
    3 [报告]
    发表于 2006-11-16 15:48 |只看该作者
    没高手反应吗?我意思是在很多远程的机器上同时启动某个命令,然后获取他们各自的退出状态
    关键是要同时启动,所以要必须放到后台才能实现同时情况,不然很简单了
    哪位高手出招啊,呵呵

    [ 本帖最后由 Mikeshew.ca 于 2006-11-16 15:50 编辑 ]

    论坛徽章:
    0
    4 [报告]
    发表于 2006-11-16 16:16 |只看该作者
    写个shell包住这个command,先直接调用它,然后将退出状态输出到某专用目录下以$$(当前所起的进程号)命名的文件中。
    主控程序使用这个shell来代替command调用,再监控输出文件。

    论坛徽章:
    1
    荣誉会员
日期:2011-11-23 16:44:17
    5 [报告]
    发表于 2006-11-16 16:19 |只看该作者
    try:
    (cmd 2>errlog.$$)&

    论坛徽章:
    0
    6 [报告]
    发表于 2006-11-23 18:54 |只看该作者
    执行的命令有很多,并且没个命令是在后台执行,现在想取得每个命令的执行结果
    有什么好的方法没啊?很急啊
    多谢了

    [ 本帖最后由 Mikeshew.ca 于 2006-11-23 18:57 编辑 ]

    论坛徽章:
    0
    7 [报告]
    发表于 2006-11-23 19:46 |只看该作者
    一个笨办法把那条ssh命令单独写一个sh脚本, 然后让脚本在后台运行,  命令主循每个一个时间间隔检查状态文件.

    单独的sh脚本 正常结束时候把$?写到tmp.$$文件中(主进程看就是$!)...

    办法很笨, 应该行的通...

    论坛徽章:
    0
    8 [报告]
    发表于 2006-11-23 22:30 |只看该作者
    ( awk 'BEGIN {exit system("ssh host command[no]")}' no=${i} )&

    这个应该也可以搞定...^_^ ssh最后的状态通过看awk就可以了...


    1. Administrator@EDENSXY ~
    2. $ awk 'BEGIN {exit system("date")}'
    3. Thu Nov 23 22:36:17     2006

    4. Administrator@EDENSXY ~
    5. $ echo $?
    6. 0


    7. Administrator@EDENSXY ~
    8. $ awk 'BEGIN {exit system("date > /dev/null")}'

    9. Administrator@EDENSXY ~
    10. $ echo $?
    11. 0


    12. Administrator@EDENSXY ~
    13. $ awk 'BEGIN {exit system("date1 > /dev/null")}'
    14. sh: date1: command not found

    15. Administrator@EDENSXY ~
    16. $ echo $?
    17. 127

    18. Administrator@EDENSXY ~
    19. $ awk 'BEGIN {exit system("date1 > /dev/null 2>&1")}'

    20. Administrator@EDENSXY ~
    21. $ echo $?
    22. 127
    复制代码

    [ 本帖最后由 Edengundam 于 2006-11-23 22:37 编辑 ]

    论坛徽章:
    0
    9 [报告]
    发表于 2006-11-28 10:56 |只看该作者
    原帖由 Edengundam 于 2006-11-23 22:30 发表
    ( awk 'BEGIN {exit system("ssh host command[no]")}' no=${i} )&

    这个应该也可以搞定...^_^ ssh最后的状态通过看awk就可以了...

    [code]
    Administrator@EDENSXY ~
    $ awk 'BEGIN {exit sys ...


    我想用这个思路还是对的,但实现不能执行,因为ssh命令参数都是用变量代替的,还有一个我想吧执行后的返回值也赋值写入一特定文件里,同时其他的输出打印在屏幕及另一日志文件里
    有好的方法吗?
    很急

    [ 本帖最后由 Mikeshew.ca 于 2006-11-28 11:09 编辑 ]

    论坛徽章:
    0
    10 [报告]
    发表于 2006-11-28 11:09 |只看该作者
    原帖由 Mikeshew.ca 于 2006-11-28 10:56 发表


    我想用这个思路还是对的,但实现不能执行,因为ssh命令参数都是用变量代替,并且执行后的返回值也赋值给一变量
    有好的方法吗?
    很急


    参数当然能传给awk.

    你需要什么?? ssh的执行情况和退出状态?
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP