Linux优雅的关闭小型程序

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章