LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 164|回复: 0

killproc的使用

[复制链接]
发表于 2023-12-19 16:25:18 | 显示全部楼层 |阅读模式

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文件是否存在。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表