如果gracefull关闭失败,则强制终止

时间:2015-11-05 19:56:51

标签: bash kill

我们有一个bash脚本可以关闭我们的应用程序,特别是我们有这样的停止函数。

doStop(){
pid=`cat ${pidfile}`
echo "Gracefully terminating server with pid $pid"
kill ${pid}
echo "Server stopped"
}

然而,由于各种原因,杀戮可能会失败,我们希望像这样杀死它......

kill -9 ${pid}

有没有办法等待kill工作,如果没有发出kill -9?

1 个答案:

答案 0 :(得分:1)

来自man kill`

  

kill - 向进程发送信号

这意味着kill没有收到来自该流程的任何回复。 “等待”该过程的唯一方法是检查该过程是否存在一段时间,并在时间结束时发送给他kill -9

例如(未经测试)

doStop(){
  pid=$(cat ${pidfile})
  echo "Gracefully terminating server with pid $pid"
  kill ${pid}
  let count=60
  while [[ $count -ge 0 ]] && [[ -n "$(ps --pid ${pid} -o pid=)" ]]
  do
    sleep 1
    let "count--"
  done

  if [[ -n "$(ps --pid ${pid} -o pid=)" ]];
  then
    kill -9 ${pid}
  fi

  if [[ -n "$(ps --pid ${pid} -o pid=)" ]];
    then
    echo "Server stopped"
    exit 0
  else
    echo "Failed to stop server"
    exit 1
  fi
}