Shell腳本判斷進程是否存在的實現(xiàn)示例
背景
需要一個shell 腳本檢測一下進程是否存在,如果存在則直接kill 掉
問題處理
查看進程id
ps -ef|grep node_exporter|grep -v grep|awk '{print $2}'
如果應(yīng)用進程是存在的且只有一個進程,在腳本中打印會發(fā)現(xiàn)有三個進程id,其中有兩個進程是用不到的,且多出來的兩個進程id和當(dāng)前腳本子進程相關(guān),為什么會有兩個無關(guān)的進程id呢?理論上來講主機上只有這一個關(guān)鍵詞的進程,排查發(fā)現(xiàn)是因為定義的腳本名稱包含了node_exporter所導(dǎo)致。
知識點補充
shell腳本在執(zhí)行時,會啟動子shell的進程。作為主shell的子進程,子shell將shell腳本中的命令作為批處理運行(因此稱為“批處理進程”)。
在bash中,子shell進程的PID存儲在一個特殊的變量‘$$’中。這個變量只讀,你不可以在腳本中修改它。
除了$$, bash shell還會導(dǎo)出其他的只讀變量。比如,PPID存儲子shell父進程的ID(也就是主shell)。UID存儲了執(zhí)行這個腳本的當(dāng)前用戶ID
echo $PPID echo UID
解決方法
優(yōu)化獲取進程id方式
ps -ef|grep node_exporter|grep -v grep|grep -v $$|awk '{print $2}'
這樣獲得的進程就會過濾掉當(dāng)前腳本的進程,問題處理
腳本偽代碼供參考
# 檢查 node_exporter 進程是否存在,存在則直接kill 掉 check_node_exporter_status(){ echo "check node exporter status start " node_exporer_proc=`ps -ef|grep node_exporter|grep -v grep|grep -v $$|awk '{print $2}'` if [[ $node_exporer_proc != "" ]]; then echo "node_exporter process id is $node_exporer_proc" sudo kill $node_exporer_proc fi echo "check node exporter status end " }
到此這篇關(guān)于Shell腳本判斷進程是否存在的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Shell判斷進程存在內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux系統(tǒng)中bash shell編程的10個基礎(chǔ)問題講解
這篇文章主要介紹了Linux系統(tǒng)中bash shell編程的10個基礎(chǔ)問題講解,這10個問題涵蓋了很多Linux shell編程的基本知識點及bash shell的特性,非常推薦!需要的朋友可以參考下2016-02-02shell查找當(dāng)前目錄下大于1M的文件的三種方法分享
查找當(dāng)前目錄下大于1M的文件的三種方法,有需要的朋友可以參考下2013-02-02shell腳本學(xué)習(xí)之調(diào)用腳本將文件打包zip的方法示例
這篇文章主要給大家介紹了關(guān)于shell腳本學(xué)習(xí)之調(diào)用腳本將文件打包zip的方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-07-07Ubuntu、Linux Mint一鍵安裝Chrome瀏覽器的Shell腳本分享
這篇文章主要介紹了Ubuntu、Linux Mint一鍵安裝Chrome瀏覽器的Shell腳本分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-03-03