pidof命令獲取不到程序的pid問題解決
pidof命令獲取不到程序的pid
問題描述
有一個功能,需要監(jiān)控某個進(jìn)程是否運行,如果由于某些原因沒在運行(如異常掛死),則執(zhí)行某個腳本,重新啟動系統(tǒng)。很簡單那的一個功能,三下五除二寫了一個腳本:
#!/bin/bash all_process_pid=(`pidof xxxx`) process_num=${all_process_pid[*]} if [ ${process_num} -eq 1 ];then echo "normal" else echo "unnormal" fi exit
運行后,很完美,可以正常工作。然而在運行了一段時間后,總是發(fā)現(xiàn)系統(tǒng)莫名奇妙地重啟,查看日志發(fā)現(xiàn)被監(jiān)控的xxxx進(jìn)程總是異常退出,因而會重啟系統(tǒng)。然而這個進(jìn)程一般情況下比較穩(wěn)定,不會那么頻繁的掛死。但為了確定問題,就在監(jiān)控腳本中加了一些調(diào)試信息,打印出現(xiàn)異常時候所有的進(jìn)程。當(dāng)出現(xiàn)問題的時候,發(fā)現(xiàn)這個進(jìn)程其實是存在的,通過ps可以看到這個進(jìn)程正則運行,但通過pidof獲得的進(jìn)程卻為空,基本上判斷是pidof未找到進(jìn)程ID導(dǎo)致的,可為什么pidof未找到呢?查詢資料后發(fā)現(xiàn),pidof默認(rèn)情況下,不能列出zombie和I/O waiting狀態(tài)的進(jìn)程。
查看 zombie和I/O waiting狀態(tài)的進(jìn)程
通過pidof -h可以看到有個-z選項可以列出zombie和I/O waiting狀態(tài)的進(jìn)程。
[root@probe: ~]$ pidof -h pidof usage: [options] <program-name> -c Return PIDs with the same root directory -d <sep> Use the provided character as output separator -h Display this help text -n Avoid using stat system function on network shares -o <pid> Omit results with a given PID -q Quiet mode. Do not display output -s Only return one PID -x Return PIDs of shells running scripts with a matching name -z List zombie and I/O waiting processes. May cause pidof to hang.
但這個-z選項可能會導(dǎo)致pidof異常。
需要注意的是,不是每個發(fā)行的操作系統(tǒng)中的pidof命令都有-z選項,比如我目前使用的fedora workstation 38版本中,pidof就沒有-z選項。
[zy@fedora ~]$ pidof -V pidof from procps-ng 3.3.17 [zy@fedora ~]$ pidof -h Usage: pidof [options] [program [...]] Options: -s, --single-shot return one PID only -c, --check-root omit processes with different root -q, quiet mode, only set the exit code -w, --with-workers show kernel workers too -x also find shells running the named scripts -o, --omit-pid <PID,...> omit processes with PID -S, --separator SEP use SEP as separator put between PIDs -h, --help display this help and exit -V, --version output version information and exit
解決方案
問題既然已經(jīng)明確,就比較好修改了。由于pidof使用-z選項存在風(fēng)險,且pidof命令在不同的操作系統(tǒng)中參數(shù)不相同,當(dāng)軟件運行在不支持-z選項的操作系統(tǒng)上會有問題,因此決定使用其它命令判斷。使用ps和grep組合進(jìn)行判斷。
參考資料https://forums.linuxmint.com/viewtopic.php?t=335764
以上就是pidof命令獲取不到程序的pid問題解決的詳細(xì)內(nèi)容,更多關(guān)于pidof命令獲取不到程序pid的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Linux系統(tǒng)中同時執(zhí)行多個腳本運行方法小結(jié)
文章詳細(xì)解釋了在命令行中使用&&,||,;和&符號來控制Python腳本的執(zhí)行順序和錯誤處理策略,&&確保前一個腳本成功后執(zhí)行下一個,||則在前一個腳本失敗后執(zhí)行后續(xù)腳本,;無論前一個腳本是否出錯都會執(zhí)行下一個,而&則用于并行執(zhí)行多個腳本,需要的朋友可以參考下2024-12-12Linux中的service命令與systemctl命令有何區(qū)別
在Linux中,service?和?systemctl?是兩個至關(guān)重要且極其相似的命令,它們?nèi)绱讼嗨?,以至于人們很容易想知道它們之間有何不同,是否可以互換使用,下面我們就來看看之前的區(qū)別到底有哪些吧2023-08-08shell 生成隨機(jī)數(shù)的實現(xiàn)方法總結(jié)
這篇文章主要介紹了 shell 生成隨機(jī)數(shù)的實現(xiàn)方法總結(jié)的相關(guān)資料,希望通過本能幫助到大家,讓大家徹底掌握這幾種隨機(jī)數(shù)的方法,需要的朋友可以參考下2017-09-09shell腳本實現(xiàn)統(tǒng)計文件大小、批量創(chuàng)建用戶的示例
這篇文章主要介紹了shell腳本實現(xiàn)統(tǒng)計文件大小、批量創(chuàng)建用戶的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03