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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值