2010-02-04 324 views
6

我正在檢查進程是否正在運行。如果它正在運行,我想要一個返回值'OK',如果不是返回值'Not OK'。如果這是正確的術語,我只能使用沒有附加任何其他參數的'ps'(例如ps -ef)。我的代碼是:檢查進程是否正在運行

if ps | grep file; then echo 'OK'; else echo 'NO'; fi 

這裏的問題是,它並沒有搜索精確的過程,總是返回「OK」,我不希望所有的信息出現我只是想知道,如果該文件是否存在。

回答

10

您的代碼總是返回'OK',因爲grep發現自己在進程列表中('grep文件'包含單詞'file')。解決辦法是做一個`grep -e [f] ile'(-e用於正則表達式),它不會找到它自己。

2
ps | grep -q '[f]ile' 
6

備用grep真正的問題:

ps -C file 

避免使用grep完全的問題。

-1

有使用grep的解決方案,以及:

if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then 
... 
elif [ ... ]; then 
... 
else 
... 
fi 

這工作正常,在Debian的6,不知道其他發行版。需要'{print $11}',因爲系統也將grep視爲一個過程。

1

當我知道PID我更喜歡:

[ -d /proc/<pid> ] && echo OK || echo NO 
0
if ps | grep file | grep -v grep; 
then echo 'ok'; 
else echo 'no'; 

的grep -v grep的可以確保你得到的結果是不是在執行grep的聲明。

1

那麼「pgrep」呢?

$ pgrep -x foo 
xxxx 
$ 

其中xxxx是名爲FOO二進制運行的PID。如果foo沒有運行,那麼沒有輸出。

另外:

$如果[[pgrep -x foo]];然後回顯「是」;否則回顯「否」;網絡連接;

如果foo正在運行,將打印「是」 「否」,如果不是。

請參閱pgrep手冊頁。