【问题标题】:Bash need to check if multiple pid existBash需要检查是否存在多个pid
【发布时间】:2017-03-09 22:01:45
【问题描述】:

我正在构建的脚本需要检查是否有更多进程 (pid) 正在运行同一进程。如果进程两次运行,我们需要终止该进程。

这是一个示例,由于某种原因,此过程将运行两次。所以我们需要监控这个并且需要杀死/重启单声道进程。

#!/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 '%s\n' "$*" >&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 == '' ]]

我是怎么做到的?

【问题讨论】:

    标签: bash centos


    【解决方案1】:

    如果我理解正确,您的问题是 pidof 返回一个包含多个 pid 的列表,而您希望将它们全部杀死。

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

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

    这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-09
      • 2016-10-17
      • 2012-08-18
      • 2013-07-11
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多