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