Bash需要检查是否存在多个PID



我正在构建的脚本需要检查更多的进程(PID)是否正在运行相同的过程。如果该过程进行了Twise,我们需要杀死此过程。

这是一个示例,出于某种原因,此过程将运行两次。因此,我们需要监视它,需要杀死/重新启动单声道过程。

#!/bin/sh
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
set -x                          # set debug
PID="/usr/local/bin/Serverd.pid"
Service="/etc/init.d/serverd" $1
#
# Functions
#
die (){
   printf '%sn' "$*" >&2
   exit 1
}
log(){
   logger -t HealthCheck -i $*
}
process () {
   [[ $(pidof mono /dev/null 2>&1) == '' ]] && echo 0 || echo 1
}
pid () {
   [[ ! -r $PID ]] && echo 0 || echo 1
}
for i in $(process); do
   if [[ $i -eq '0' ]]
   then
      echo 'Process is Stoped!!!!!'
      if [[ $(pid) -eq '1' ]]
      then
         echo PID still there, remove PID first
         rm -rf $PID
         $Service start
         exit 1
      else
         $Service start
         exit 1
      fi
   else
      echo 'Process is Running!!!!'
      exit 1
   fi
done

如果我有相同的单声道过程的2个PID,则需要杀死

+++ pidof mono /dev/null
++ [[ 30454 30014 == '' ]]

我怎么做的猫?

如果我正确理解,您的问题是pidof返回多个PID的列表,您希望杀死它们。

如果是这样,您可以这样做:

pids=($(pidof mono))
for pid in ${pids[@]:1}; do
    kill -9 $pid
done

这个:

  • 将PID放入数组
  • 获得一个不包含第一个元素的子阵列
  • 杀死该子阵列中的每个项目。

最新更新