大型的会有告警。可采用发送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