免费注册 查看新帖 |

Chinaunix

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

执行一个脚本,在ps的时候却发现多个相同的进程名 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-09 11:55 |只看该作者 |倒序浏览
TEST> ps -ewwf | grep mt_log_cron
xyz      26040 26029  0 11:50 ?        00:00:00 /bin/sh -c /usr/local/app/binary/monitor/mt_log_cron.sh >> /usr/local/app/binary/monitor/log/mt_log_cron.log 2>>/usr/local/app/binary/monitor/log/mt_log_cron.err
xyz      26044 26040  0 11:50 ?        00:00:00 /bin/bash /usr/local/app/binary/monitor/mt_log_cron.sh
xyz      26489 26044  0 11:50 ?        00:00:00 /bin/bash /usr/local/app/binary/monitor/mt_log_cron.sh
xyz      27265 11984  0 11:50 pts/15   00:00:00 grep mt_log_cron


以前没注意到,以为执行一个脚本, 只会在ps的时候看到一个进程名,但是这里竟然显示了3个..
这是咋回事啊,各位大侠?
看进程之间的关系,好像是一层一层继承下来的, 我的机器是4核的,是跟多核有关系么?

论坛徽章:
0
2 [报告]
发表于 2008-09-09 12:18 |只看该作者
是个fork的程序吧

论坛徽章:
0
3 [报告]
发表于 2008-09-09 12:30 |只看该作者
原帖由 cnangel 于 2008-9-9 12:18 发表
是个fork的程序吧

脚本里没有fork, 就是普通的脚本,调用一些awk 之类的处理日志文件............

论坛徽章:
0
4 [报告]
发表于 2008-09-09 15:01 |只看该作者
跟多核没有关系,多核是并发执行,但也不能把一个进程分成三个进程阿。
应该还是和你的脚本 有关系,脚本中有的语句可能会自动创建子进程的。

[ 本帖最后由 meiki05 于 2008-9-9 15:09 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-09-09 15:10 |只看该作者
man sh


-c string            If the -c option is present, then commands are read from string.  If there are arguments after the string, they  are  assigned  to  the  positional  parameters, starting with $0.


好像和-c没什么关系


楼主试一下pstree -p看看是谁生出这么些进程来的

论坛徽章:
1
寅虎
日期:2015-01-23 02:35:47
6 [报告]
发表于 2008-09-09 15:14 |只看该作者
通过id看就应该是一个一个派生的,看看你程序是什么内容

论坛徽章:
0
7 [报告]
发表于 2008-09-09 15:22 |只看该作者

回复 #6 cuci 的帖子

好撒,贴出来也无妨咯,重要的是解决我心中的疑惑:)

#!/bin/bash

export PATH="/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/bin/X11:/usr/local/app/wsl_bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/local/Ice/bin:"
. /usr/local/app/binary/monitor/functions

RUNNING_FILE="/usr/local/app/binary/monitor/.mt_log_cron_run"
PROC_NAME=`basename $0`

if [ -f ${RUNNING_FILE} ] ; then
    echo "${PROC_NAME} is running ... EXIT 99"  1>&2
    exit 99
fi

touch ${RUNNING_FILE}

HISTORY="1"         #采集历史数据标志
SERV_CODE=""        #监控系统服务代码
APPLICATION=""      #应用名(同ICE编程命名规范)     
SERVER=""           #服务名(同ICE编程命名规范)     
LOG_TYPE=""         #日志类型(比如说是errro 或者up 或者down 等日志类文件)
FLOW_KEY=""         #流量关键字

BASE_DIR="/data/log_server/log/day"

TIME_INTERVAL=5

SQL="select mt_log_serv_code from db_monitor.t_mt_log_config where is_valid = 'Y';"
SERV_CODE_LIST=`mysql -uroot -h172.18.16.74 -s -e "${SQL}"`

echo "$SERV_CODE_LIST" | while read SERV_CODE ; do
    SQL="SELECT CONCAT_WS(':', mt_log_serv_code, application, server, log_type, flow_key) FROM db_monitor.t_mt_log_config WHERE mt_log_serv_code = '${SERV_CODE}';"
    CONFIG_STR=`mysql -uroot -h172.18.16.74 -s -e "${SQL}"`
    #echo ${CONFIG_STR}
    #IFS=: CONFIG_ARRAY=($CONFIG_STR)
    #IFS=
    #echo ${CONFIG_ARRAY[0]}
    #echo ${CONFIG_ARRAY[1]}
    IFS=: read SERV_CODE APPLICATION SERVER LOG_TYPE FLOW_KEY <<<"$CONFIG_STR"
   
    if [ ! -d "${BASE_DIR}/${APPLICATION}/${SERVER}" ] ; then
        echo "${BASE_DIR}/${APPLICATION}/${SERVER} is not exist... EXIT 98" 1>&2
        rm ${RUNNING_FILE}
        exit 98
    fi
    cd ${BASE_DIR}/${APPLICATION}/${SERVER}
   
    while [ 1 ] ; do
        SQL="SELECT curr_date, curr_time FROM db_monitor.t_time_ctl WHERE serv_code = '${SERV_CODE}';"
        DATE_STR=`mysql -uroot -h172.18.16.74 -s -e "${SQL}"`
        read CURR_DATE CURR_TIME <<< "$DATE_STR"
        DATE_FORMAT=`echo $CURR_DATE | tr -d "-"`
        BEGIN_TIME=${CURR_TIME}
        END_DATE_TIME=`date -d "$CURR_DATE $CURR_TIME $TIME_INTERVAL minutes" +"%Y-%m-%d %H:%M:%S"`
        read END_DATE END_TIME <<< "${END_DATE_TIME}"
   
        END_DATE_TIME_FORMAT=`echo $END_DATE_TIME | tr -d ":\ -"`
        DATE_NOW=`date +"%Y%m%d%H%M%S"`
   
        if [ -n "${LOG_TYPE}" ] ; then
            LOG_FILE=${APPLICATION}"."${SERVER}"_"${LOG_TYPE}"_"${DATE_FORMAT}.log
        else
            LOG_FILE=${APPLICATION}"."${SERVER}"_"${DATE_FORMAT}.log
        fi     
        GZ_LOG_FILE="${LOG_FILE}.gz"
   
        if [ ! -f ${LOG_FILE} ] && [ ! -f ${GZ_LOG_FILE} ] ; then
                echo "[${DATE_NOW}] ${SERV_CODE} ${LOG_FILE} && ${GZ_LOG_FILE}    \"file is not exist!\""  1>&2
                break
        fi

        if [  "${END_DATE_TIME_FORMAT}" -ge "${DATE_NOW}"  ] ; then
            echo "[${DATE_NOW}] ${SERV_CODE} ${END_DATE_TIME_FORMAT}    \"end-timestamp is big than now-time!\""
            break
        fi
   
        if [ -f ${LOG_FILE} ] ; then
            FLOW=`get_flow  "$LOG_FILE" "" "$BEGIN_TIME" "$END_TIME"`
            write_table "$SERV_CODE" "${CURR_DATE}" "${BEGIN_TIME}" "${END_TIME}" "$FLOW"
        else
            FLOW=`get_gz_flow "$GZ_LOG_FILE" "" "$BEGIN_TIME" "$END_TIME"`
            write_table "$SERV_CODE" "${CURR_DATE}" "${BEGIN_TIME}" "${END_TIME}" "$FLOW"
        fi
        
        SQL="update db_monitor.t_time_ctl set last_date = '$CURR_DATE', last_time = '$CURR_TIME', curr_date= '$END_DATE', curr_time='$END_TIME', update_time=now() where serv_code = '$SERV_CODE'"
        mysql -uroot -h172.18.16.74 -s -e "${SQL}"
        
        #break  对所有历史数据都做循环,所以注释掉break
        if [ "${HISTORY}" == "0" ] ; then
            break
        fi
    done
done

rm ${RUNNING_FILE}

exit 0

论坛徽章:
0
8 [报告]
发表于 2008-09-09 15:28 |只看该作者
原帖由 CloudF_N 于 2008-9-9 15:10 发表
man sh


-c string            If the -c option is present, then commands are read from string.  If there are arguments after the string, they  are  assigned  to  the  positional  parameters, s ...



pstree -p 18795
cron(18795)---sh(18804)---mt_log_cron.sh(18813)---mt_log_cron.sh(19613)---mt_log_cron.sh(20476)---mt_log_cron.sh(20477)-+-awk(2047
                                                                                                                        |-awk(20480)
                                                                                                                        `-wc(20479)

论坛徽章:
0
9 [报告]
发表于 2008-09-09 15:33 |只看该作者
那就分析一下你脚本的内容吧。
应该可以判断不是系统自动帮你创建这么多进程的,而是你的脚本要求系统帮你创建这么多个运行实例的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP