我构建的脚本需要检查更多进程(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 == '' ]]
我是怎么做的?
答案 0 :(得分:0)
如果我理解正确,您的问题是pidof
会返回多个pid的列表,并且您希望将它们全部删除。
如果是这种情况,你可以这样做:
pids=($(pidof mono))
for pid in ${pids[@]:1}; do
kill -9 $pid
done
此: