大型的會有告警。可採用發送USR1,然後程序接收信號句柄設置
a 全局變量
while(a){}
#!/bin/sh
#Used
# ./qgdb.sh progra
#MUST BE MAKE SURE PROGRAM be shut down BY a SUCCESS
#Shut down gracefully
#create by Xu__Jiayu 20180629
function quitfun()
{
#解析./prog 成prog
strn1=`echo $1 |sed 's/^[.]\\///g'`
#grep 中.被解析成任意[.]轉義 防止輸入 a.出錯
strreg=`echo $strn1|sed 's/[.]/[.]/g'`
strn2='./'$strn1
strpid=`ps -ef|grep $strreg|awk -v a1=$strn1 -v a2=$strn2 'BEGIN{}{if( 8 == NF && a1==$NF || 8 ==NF && a2 ==$NF ) {print $2 }}'`
if [ -z "$strpid" ]
then
cn=0
else
cn=`echo "$strpid"|wc -l`
fi
if [ $cn -eq 1 ]
then
#gdb -batch -ex "attach $strpid" -ex "p $2" -ex "p $2=0"
echo "SET QUIT $strpid $strn1 flag BEGIN"
outstr=`gdb -batch -ex "attach $strpid" -ex "p $2" -ex "p $2=0"`
if [ $? -eq 0 ]
then
echo "對程序$strpid $strn1 成功設置關閉條件"
sleep 2
ret=`ps -ef|grep $strreg|awk -v a1=$strn1 -v a2=$strn2 'BEGIN{}{if( 8 == NF && a1==$NF || 8 == NF && a2==$NF) {print $2 }}'|wc -l`
if [ $ret -eq 0 ]
then
echo "已經成功關閉程序$strn1"
else
echo "請手動查看是否關閉程序$strn1"
fi
else
echo "關閉條件設置失敗"
fi
echo "SET QUIT $strpid $strn1 END"
else
echo "程序$1當前運行個數$cn "
fi
echo "--------------------------"
}
strstop='a'
if [ $# -eq 0 ]
then
echo "參數個數錯誤"
else
for i in "$@" ; do
quitfun $i $strstop
done
fi