1. 程式人生 > 其它 >如何用指令碼可靠關閉一個linux服務或程序

如何用指令碼可靠關閉一個linux服務或程序

技術標籤:Linux

一、指令碼樣例

以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,無條件退出,強制退出程序,該訊號不可忽略或被程序捕獲。