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

 

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