이는 다중 스레드 프로세스가 아닙니다. 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를 살펴보십시오.