Bash Shell 獲取進程 PID(轉(zhuǎn))

http://weyo.me/pages/techs/linux-get-pid/






Bash Shell 獲取進程 PID

Date?2014-05-22????Category?Techs????Tags?Linux?/?Shell?

Posted by?WeYo. 轉(zhuǎn)載請注明出處:http://weyo.me/pages/techs/linux-get-pid/

導讀

Linux 的交互式 Shell 與 Shell 腳本存在一定的差異,主要是由于后者存在一個獨立的運行進程播玖,因此在獲取進程 pid 上二者也有所區(qū)別指巡。

交互式 Bash Shell 獲取進程 pid

在已知進程名(name)的前提下烤黍,交互式 Shell 獲取進程 pid 有很多種方法颗胡,典型的通過 grep 獲取 pid 的方法為(這里添加?-v grep是為了避免匹配到 grep 進程):

ps -ef | grep "name" | grep -v grep | awk '{print $2}'

或者不使用?grep(這里名稱首字母加[]的目的是為了避免匹配到 awk 自身的進程):

ps -ef | awk '/[n]ame/{print $2}'

如果只使用 x 參數(shù)的話則 pid 應(yīng)該位于第一位:

ps x | awk '/[n]ame/{print $1}'

最簡單的方法是使用?pgrep:

pgrep -f name

如果需要查找到 pid 之后 kill 掉該進程凑耻,還可以使用?pkill:

pkill -f name

如果是可執(zhí)行程序的話舒憾,可以直接使用?pidof

pidof name

Bash Shell 腳本獲取進程 pid

根據(jù)進程名獲取進程 pid

在使用 Shell 腳本獲取進程 pid 時,如果直接使用上述命令香拉,會出現(xiàn)多個 pid 結(jié)果,例如:

1

2

3

4

5

#! /bin/bash# process-monitor.shprocess=$1pid=$(ps x|grep$process|grep -v grep|awk'{print $1}')echo$pid

執(zhí)行?process-monitor.sh?會出現(xiàn)多個結(jié)果:

$> sh process-monitor.sh3036? 3098? 3099

進一步排查可以發(fā)現(xiàn)中狂,多出來的幾個進程實際上是子 Shell 的(臨時)進程:

root? ? ? 3036? 2905? 0 09:03 pts/1? ? 00:00:45 /usr/java/jdk1.7.0_71/bin/java ...nameroot? ? ? 4522? 2905? 0 16:12 pts/1? ? 00:00:00 sh process-monitor.sh nameroot? ? ? 4523? 4522? 0 16:12 pts/1? ? 00:00:00 sh process-monitor.sh name

其中 3036 是需要查找的進程pid凫碌,而 4522、4523 就是子 Shell 的 pid胃榕。 為了避免這種情況盛险,需要進一步明確查找條件,考慮到所要查找的是 Java 程序勋又,就可以通過 Java 的關(guān)鍵字進行匹配:

1

2

3

4

5

#! /bin/bash# process-monitor.shprocess=$1pid=$(ps -ef|grep$process|grep'/bin/java'|grep -v grep|awk'{print $2}')echo$pid

獲取 Shell 腳本自身進程 pid

這里涉及兩個指令: 1.?$$?:當前 Shell 進程的 pid 2.?$!?:上一個后臺進程的 pid 可以使用這兩個指令來獲取相應(yīng)的進程 pid苦掘。例如,如果需要獲取某個正在執(zhí)行的進程的 pid(并寫入指定的文件):

myCommand && pid=$!myCommand & echo $! >/path/to/pid.file

注意楔壤,在腳本中執(zhí)行?$!?只會顯示子 Shell 的后臺進程 pid鹤啡,如果子 Shell 先前沒有啟動后臺進程,則沒有輸出蹲嚣。

查看指定進程是否存在

在獲取到 pid 之后递瑰,還可以根據(jù) pid 查看對應(yīng)的進程是否存在(運行),這個方法也可以用于 kill 指定的進程隙畜。

if ps -p $PID > /dev/nullthen? echo "$PID is running"? # Do something knowing the pid exists, i.e. the process with $PID is runningfi

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抖部,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子禾蚕,更是在濱河造成了極大的恐慌您朽,老刑警劉巖狂丝,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件换淆,死亡現(xiàn)場離奇詭異,居然都是意外死亡几颜,警方通過查閱死者的電腦和手機倍试,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛋哭,“玉大人县习,你說我怎么就攤上這事∽恢海” “怎么了躁愿?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沪蓬。 經(jīng)常有香客問我彤钟,道長,這世上最難降的妖魔是什么跷叉? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任逸雹,我火速辦了婚禮营搅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梆砸。我一直安慰自己转质,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布帖世。 她就那樣靜靜地躺著休蟹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狮暑。 梳的紋絲不亂的頭發(fā)上鸡挠,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音搬男,去河邊找鬼拣展。 笑死,一個胖子當著我的面吹牛缔逛,可吹牛的內(nèi)容都是我干的备埃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼褐奴,長吁一口氣:“原來是場噩夢啊……” “哼按脚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敦冬,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤辅搬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脖旱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堪遂,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年萌庆,在試婚紗的時候發(fā)現(xiàn)自己被綠了溶褪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡践险,死狀恐怖猿妈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巍虫,我是刑警寧澤彭则,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站占遥,受9級特大地震影響俯抖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筷频,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一蚌成、第九天 我趴在偏房一處隱蔽的房頂上張望前痘。 院中可真熱鬧,春花似錦担忧、人聲如沸芹缔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽最欠。三九已至,卻和暖如春惩猫,著一層夾襖步出監(jiān)牢的瞬間芝硬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工轧房, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拌阴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓奶镶,卻偏偏與公主長得像迟赃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厂镇,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容