免费注册 查看新帖 |

Chinaunix

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

大家帮忙看看,这个死循环shell脚本会退出么,很奇怪 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-05 20:33 |只看该作者 |倒序浏览
从网上下的一个监控进程退出后重启进程的脚本,怎么有时候会退出呢?退出是被监控的进程也不在了
#!/bin/bash
CheckProcess()
{
        if [ "$1" = "" ];
        then
                return 1
        fi
    PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l`
    if [ $PROCESS_NUM -eq 1 ];
    then
        return 0
    else
        return 1
    fi
}
while [ 1 ] ; do
    CheckProcess "abc"
    CheckQQ_RET=$?
    if [ $CheckQQ_RET -eq 1 ];
    then
     killall abc
     exec /root/abc &
     echo `date` >>/root/dlog
    fi
    sleep 10
done

论坛徽章:
0
2 [报告]
发表于 2011-07-06 11:13 |只看该作者
http://cr.yp.to/daemontools.html

论坛徽章:
0
3 [报告]
发表于 2011-07-06 14:42 |只看该作者
回复 1# fbwww


关键还是在于你的exec 命令:
shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。
因此,如果你在一个shell里面,执行exec ls那么,当列出了当前目录后,这个shell就自己退出了,因为这个shell进程已被替换为仅仅执行ls命令的一个进程,执行结束自然也就退出了。为了避免这个影响我们的使用,一般将exec命令放到一个shell脚本里面,用主脚本调用这个脚本,调用点处可以用bash a.sh,(a.sh就是存放该命令的脚本),这样会为a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP