如何用脚本可靠关闭一个linux服务或进程

本文介绍了一段用于Quectel EC20模组的脚本,该脚本能够安全地关闭PPPoE连接。通过发送不同类型的终止信号确保pppd服务干净地退出,避免了因进程残留导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、脚本样例

以quectel的EC20模组关闭ppp拨号服务脚本为例,以下为脚本源码:

#!/bin/sh
timeout=5
killall -15 pppd
sleep 1
killall -0 pppd
while [ $? -eq 0 ]
do
	timeout=`expr $timeout - 1`
	if [ $timeout -eq 0 ]
	then
		exit 1
	fi
	sleep 1
	killall -0 pppd
done
	
if [ $? -ne 0 ]
then
	killall -9 pppd
fi	

二、代码解释

kill 后跟pid来结束进程; killall 后跟服务名称/进程名称来结束进程。

kill/killall后边跟的数字含义见下图

killall -15 pppd : 给pppd进程发送SIGTERM信号,通知该进程自己实现退出,但该程序可能在执行IO,不一定能及时响应,因此有可能被阻塞。

sleep 1: 延时1s,等待pppd自我实现退出,此时不一定能成功。

killall -0 pppd : 发送-0 的含义是判断当前进程或服务是否存在, 该进程或服务不作任何响应,如果返回0则服务存在,否则服务不存在。

while [ $? -eq 0 ] : shell 脚本的while循环控制,$?表示上一条语句执行结果。

exit 1: 退出while,并返回while的执行结果为1,一般表明异常退出,此处的含义为5秒内pppd没有正常退出。

if [ $? -ne 0 ]:判断while执行的结果,如果不为0,则执行if内容;

killall -9 pppd:发送SIGKILL信号给pppd,无条件退出,强制退出进程,该信号不可忽略或被进程捕获。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值