killproc的使用
killproc:杀掉给定的服务进程。
函数调用方式:
killproc [-p pidfile] [-d delay] program [-signal]
-p pidfile:选项用于指定从此文件中获取进程的pid号,不指定时默认从/var/run/$base.pid中获取。
-signal:用于指定kill发送的信号。如果不指定,则默认先发送TERM信号,在-d delay时间段内仍不断检测是否进程已经被杀死,如果还未死透,则delay超时后发送KILL信号强制杀死。
-d delay:指定未使用-signal时的延迟检测时间。有效单位为秒、分、时、日(“smhd”),不写时默认为秒。
需要明确的是,只有/proc目录下没有了pid对应的目录才算是杀死了。
一般来说,killproc前会判断进程是否已在运行,最后还要删除pid文件和lock文件。当然,killproc函数可以保证pid文件被删除。所以,killproc函数大致会同时配合以下语句用来杀进程:
status -p ${pidfile} $prog > /dev/null
if [[ $? = 0 ]]; then
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
else
echo -n $"Stopping $prog: "
success
fi
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f ${lockfile} ${pidfile}
同样注意,killproc中已经自带success和failure函数。如果不使用killproc杀进程,则通常会配合action函数或者success、failure。大致如下:
killall $prog ; usleep 50000 ; killall $prog
RETVAL=$?
if [ "RETVAL" -ne 0 ];then
action $"Stopping $prog: " /bin/true
rm -rf ${lockfile} ${pidfile}
else
action $"Stoping $prog: " /bin/false
fi
以上由于采用的是killall命令,如果采用的是kill命令,则需要先获取进程的pid,在此之前还要检查pid文件是否存在。
|