我正在檢查進程是否正在運行。如果它正在運行,我想要一個返回值'OK',如果不是返回值'Not OK'。如果這是正確的術語,我只能使用沒有附加任何其他參數的'ps'(例如ps -ef)。我的代碼是:檢查進程是否正在運行
if ps | grep file; then echo 'OK'; else echo 'NO'; fi
這裏的問題是,它並沒有搜索精確的過程,總是返回「OK」,我不希望所有的信息出現我只是想知道,如果該文件是否存在。
我正在檢查進程是否正在運行。如果它正在運行,我想要一個返回值'OK',如果不是返回值'Not OK'。如果這是正確的術語,我只能使用沒有附加任何其他參數的'ps'(例如ps -ef)。我的代碼是:檢查進程是否正在運行
if ps | grep file; then echo 'OK'; else echo 'NO'; fi
這裏的問題是,它並沒有搜索精確的過程,總是返回「OK」,我不希望所有的信息出現我只是想知道,如果該文件是否存在。
您的代碼總是返回'OK',因爲grep發現自己在進程列表中('grep文件'包含單詞'file')。解決辦法是做一個`grep -e [f] ile'(-e用於正則表達式),它不會找到它自己。
ps | grep -q '[f]ile'
備用grep
真正的問題:
ps -C file
避免使用grep
完全的問題。
有使用grep的解決方案,以及:
if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then
...
elif [ ... ]; then
...
else
...
fi
這工作正常,在Debian的6,不知道其他發行版。需要'{print $11}'
,因爲系統也將grep視爲一個過程。
當我知道PID我更喜歡:
[ -d /proc/<pid> ] && echo OK || echo NO
if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';
的grep -v grep的可以確保你得到的結果是不是在執行grep的聲明。
那麼「pgrep」呢?
$ pgrep -x foo
xxxx
$
其中xxxx是名爲FOO二進制運行的PID。如果foo沒有運行,那麼沒有輸出。
另外:
$如果[[
pgrep -x foo
]];然後回顯「是」;否則回顯「否」;網絡連接;
如果foo正在運行,將打印「是」 「否」,如果不是。
請參閱pgrep手冊頁。