2017-03-09 40 views
0

我正在构建的脚本需要检查是否有更多进程(pid)正在同一进程中运行。如果过程顺利进行,我们需要杀死这个过程。Bash需要检查是否存在多个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 

如果我有同样的单进程的PID 2这种需求被杀害

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

如何猫我做到这一点?

回答

0

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

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

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

此:

  • 提出的PID阵列中的
  • 获取不包含的第一个元素
  • 击杀每一个子数组该子阵列中的项目。
+0

是的,非常感谢,这个工作! – DarkNight

相关问题