我正在构建的脚本需要检查更多的进程(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放入数组
- 获得一个不包含第一个元素的子阵列
- 杀死该子阵列中的每个项目。