서로 다른 PID를 가진 2개의 동일한 프로세스가 실행 중입니다. - 스레드되지 않음

서로 다른 PID를 가진 2개의 동일한 프로세스가 실행 중입니다. - 스레드되지 않음

이는 다중 스레드 프로세스가 아닙니다. ps나는 관찰했다 top:

[user@host]$ ps aux | grep -i [r]redacted                                                                                                                                                                                                                                                
500       3073  6.1 11.7 1457148 188188 ?      Sl   Feb14  91:54 /usr/bin/python2.7 /usr/bin/redacted_proc
500       3120  6.1 11.0 1541952 177184 ?      Sl   Feb14  91:56 /usr/bin/python2.7 /usr/bin/redacted_proc


top - 10:02:55 up 728 days, 19:30,  3 users,  load average: 0.26, 0.14, 0.14
Tasks:  99 total,   1 running,  97 sleeping,   0 stopped,   1 zombie
Cpu(s):  3.7%us,  1.0%sy,  0.0%ni, 95.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   1598640k total,  1239756k used,   358884k free,   192296k buffers
Swap:        0k total,        0k used,        0k free,   346756k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                         
 3120 redacted  20   0 1505m 173m 4648 S 10.3 11.1  93:33.08 redacted_proc                                                                                                                                                                                                                                                     
 3073 redacted  20   0 1422m 185m 4608 S  6.6 11.9  93:31.04 redacted_proc

두 PID가 모두 종료되고 프로세스가 정상적으로 시작되었으므로 프로세스에는 다시 실행 중인 PID가 있습니다.

Linux가 두 개의 동일한 프로세스를 실행하는 이유는 무엇입니까? 특히 init 스크립트가 이미 이를 고려해야 하고 /var/run/redacted.pid아래에 항목이 하나만 있는 경우에는 더욱 그렇습니다.

초기화 스크립트의 내용을 포함합니다.

#!/bin/bash
# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0
DAEMON=redacted_process
BIN="/usr/bin/redacted_process"
OPTS=""
RUNAS=redacted
PIDDIR=/var/run/${DAEMON}
PIDFILE=${PIDDIR}/${DAEMON}.pid

start () {
    echo -n "Starting ${DAEMON}: "
    [ -f ${PIDFILE} ] && success && echo && return 0
    su -s /bin/bash ${RUNAS} -c "
        cd /
        ${BIN} ${OPTS} &> /dev/null &
        echo \$! > ${PIDFILE}
        disown \$!
    "
    RETVAL=$?
    [ $RETVAL -eq 0 ] && success || failure
    echo
    return $RETVAL
}

stop () {
    echo -n "Shutting down ${DAEMON}: "
    killproc ${DAEMON}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${DAEMON}
    [ $RETVAL -eq 0 ] && rm -f ${PIDFILE}
    return $RETVAL
}

restart () {
    stop
    start
    RETVAL=$?
    return $RETVAL
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart|reload)
        restart
        ;;
    status)
        status ${DAEMON}
        RETVAL=$?
        ;;
    *)
        echo "Usage: ${0} {start|stop|restart|status}"
        RETVAL=1
esac

exit $RETVAL

/etc/crontab흥미로운 점은 이 작업에도 1분마다 실행되는 항목이 있다는 것입니다.

    /sbin/service redacted status > /dev/null
    if [ "$?" -gt "0" ]; then
        /bin/rm /var/run/redacted_proc/*
        /sbin/service redacted restart && tail -n 200 /var/log/redacted_proc/redacted_prod.log | mail -s "redacted pid restarted on ${HOSTNAME}" [email protected]
    fi

ps이 크론 작업의 경우 <defunct>.

이로 인해 프로그램이 두 번 실행되는지 궁금합니다.

답변1

어떤 것(또는 한 가지 이상)이 프로그램을 두 번 실행하는 것 같습니다.

ps ax -o ppid,pid,lstart,cmd프로세스의 시작 시간을 얻으 십시오 . 이를 시작할 수 있는 스크립트를 검색하세요.

또한 상위 프로세스 ID를 살펴보십시오.

관련 정보