这不是一个多线程进程。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 运行两个相同的进程,尤其是当它的初始化脚本应该已经考虑到这一点,而下面/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
这很有趣,这个作业还有一个每分钟运行的条目:
/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
该 cron 作业显示为<defunct>
.
我想知道这是否以某种方式导致该程序运行两次。
答案1
有些东西(或不止一件事)似乎运行了该程序两次。
尝试ps ax -o ppid,pid,lstart,cmd
获取进程的启动时间。并搜索可能启动它的脚本。
另请查看父进程 ID。