2017-03-09 9 views
0

ビルドしているスクリプトは、同じプロセスをより多くのプロセス(pid)が実行しているかどうかを確認する必要があります。プロセスがうまくいったら、このプロセスを終了する必要があります。複数のpidが存在するかどうかを確認するためにBashが必要です

これは例ですが、何らかの理由でこのプロセスが2回実行されます。だから私たちはこれを監視し、モノプロセスをkill/restartする必要があります。

#!/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 == '' ]] 

を殺されるためにこの必要性を持っている場合は?

答えて

0

私が正しく理解していれば、pidofは複数のpidのリストを返し、それらをすべて終了したいという問題があります。

そのような場合、あなたができる:

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

この:

  • が最初の要素に
  • キルそれぞれを含まない部分配列を取得します
  • 配列内のPIDを入れますそのサブアレイ内の項目の
+0

ありがとう、これは仕事でした! – DarkNight

関連する問題