linux killproc,linux的functions之killproc函数详解

linux的functions之killproc函数详解

来源:互联网 作者:佚名 时间:2014-05-31 15:36

#该函数的作用是关闭进程的.#用法:#killproc[-ppidfile][-ddelay]program[-signal]#-p:指定进程的pid文件,一般在/var/run/x..

# 该函数的作用是关闭进程的.

# 用法:

# killproc [-p pidfile] [-d delay]  [-signal]

# -p:  指定进程的pid文件,一般在/var/run/xxx.pid

# -d:  指定延迟多长时间就强度关闭进程

# -signal: 关闭进程的信号

# A function to stop a program.

killproc() {

local RC killlevel= base pid pid_file= delay

# 定义局部变量,只在函数体内有效。

RC=0; delay=3  # 默认延迟3秒,,不能正常关闭就强制关闭

# Test syntax. # 判断用户调用该函数时,给的参数格式。并使用变量记录下来

if [ "$#" -eq 0 ]; then

echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]“

# 如果调用该函数时,不使用任何参数的话将给用户输出使用该函数的使用方法。

return 1       # 退出该函数。

fi

if [ "$1" = "-p" ]; then

# 如果参数1,是字符 -p 的话,那么用户输入的第二个参数就是:

# 程序的pid_file文件。通常是/var/run/XXX.pid

pid_file=$2

shift 2

fi

if [ "$1" = "-d" ]; then

delay=$2

# 记录的参数的作用是用来。如果进程在正常情况下不能关闭,

# 延迟多长时间就向该进程发送SIGKILL信号强制关闭。

shift 2

fi

# check for second arg to be kill level

# 检查用户是否指定函数关闭进程时,所使用的信号。

[ -n "${2:-}" ] && killlevel=$2

# Save basename.       # 保存进程的二进制运行文件的。

base=${1##*/}          # 参数替换,把程序的二进制文件的路径名***掉。

####################################################################

# 查找可运行二进制程序的进程号PID 部分

# Find pid.

__pids_var_run "$1" "$pid_file"

#调用 函数:__pids_var_run 来检查用户指定的程序的进程号。

# 该函数会使用一个变量:PID记录程序的进程号的。

if [ -z "$pid_file" -a -z "$pid" ]; then

# 如果pidfile文件不存在,并且找不到进程的pid号。

# 就使用该方法查找该程序$base的PID号。

pid="$(__pids_pidof "$1")"

fi

#####################################################################

# Kill it.

# 找到二进制可运行程序的进程号,是如果关闭进程的

if [ -n "$pid" ] ; then

# 如果$PID 不为空,证明进程运行的。就执行 then 后的内容

[ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base "

if [ -z "$killlevel" ] ; then

#如果用户没有指定函数要使用关闭进程的信号的话,就执行 then后的内容

if checkpid $pid 2>&1; then

# 调用函数:checkpid 来判断进程号为:$PID的进程是否

#运行。其实 checkpid是判断$PID,如果伪目录/proc

#下是否有一个目录名和$PID相同

# TERM first, then KILL if not dead

kill -TERM $pid >/dev/null 2>&1

# 给进程$PID发送 -15信号。等待进程关闭资源后,

# 再杀死该进程。

usleep 100000   #等待100000 微秒

if checkpid $pid && sleep 1 &&

#再使用函数checkpid检查,如果进程还运行的话,

#再等待1秒,

checkpid $pid && sleep $delay &&

#再使用函数checkpid检查,如果进程还运行的话,

#就使用用户给的延迟时间,再等待

checkpid $pid ; then

#在用户给的延时时间到了,再次使用函数

#checkpid检查,如果进程还是运行的

# 话,就强制关闭。

kill -KILL $pid >/dev/null 2>&1

# 给进程$PID发送 -9 信号,强制关闭该进程。

usleep 100000

fi

fi

checkpid $pid  # 再次确认下,进程$PID是否是关闭的。

RC=$?

# 记录函数checkpid的返回结果。

# 如果是:0 的话就代表关闭进程$PID成功。

[ "$RC" -eq 0 ] && failure $"$base shutdown" || success   $"$base shutdown"

# 判断函数checkpid的返回值,给用户输出进程是否关闭成功的信                        RC=$((! $RC))

# 对变量RC进行,非操作,避免下面使用该变量时,判断有误。

# use specified level only

#调用函数:killproc时传递有关闭进程的信号就执行else 后的程序

else   # 如果用户给函数killproc 传递了关闭进程所使用的信号,

#就执行else后的代码

# 作用想要通知进程重读配置文件时, 可以传递一个 -HUP 信号给进程。

if checkpid $pid; then                                                  #使用函数checkpid检查,进程$PID是否运行的,

kill $killlevel $pid >/dev/null 2>&1

#使用用户传递关闭进程的信号来关闭进程$PID

RC=$?  #记录函数checkpid的返回结果。

[ "$RC" eq 0 ] && success $"$base $killlevel"  || failure $"$base $killlevel"

# 根据$RC判断进程$PID是否关闭成功

elif [ -n "${LSB:-}" ]; then

RC=7 # Program is not running

fi

fi

###########################找不到二进制可运行程序的进程号

else

if [ -n "${LSB:-}" -a -n "$killlevel" ]; then

RC=7 # Program is not running

else

failure $"$base shutdown"

RC=0

fi

fi

# Remove pid file if any.

if [ -z "$killlevel" ]; then

rm -f "${pid_file:-/var/run/$base.pid}"

fi

return $RC

}

本文出自 “Linux” 博客,请务必保留此出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值