Проверьте, запущен ли процесс - PullRequest
6 голосов
/ 04 февраля 2010

Я пытаюсь проверить, запущен ли процесс. Если он работает, я хочу возвращаемое значение «ОК», а если нет, возвращаемое значение «Не ОК». Я могу использовать «ps» без каких-либо других аргументов (например, ps -ef), если это правильный термин. Код у меня есть:

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

Проблема в том, что он не ищет точный процесс и всегда возвращает «ОК», я не хочу, чтобы отображалась вся информация, я просто хочу знать, существует файл или нет.

Ответы [ 7 ]

10 голосов
/ 04 февраля 2010

Ваш код всегда возвращает «ОК», потому что grep находит себя в списке процессов («файл grep» содержит слово «файл»). Чтобы исправить это, нужно выполнить grep -e [f] ile (-e для регулярного выражения), который не находит себя.

7 голосов
/ 24 марта 2012

Запас grep для реальных проблем:

ps -C file

полностью исключает проблему использования grep.

2 голосов
/ 04 февраля 2010
ps | grep -q '[f]ile'
1 голос
/ 19 июля 2014

А как насчет "pgrep"?

$ pgrep -x foo
xxxx
$

где xxxx - это pid исполняемого файла с именем foo. Если foo не запущен, то ничего не выводится.

Также:

$ if [[pgrep -x foo]]; затем эхо "да"; иначе эхо "нет"; Fi;

выведет «yes», если foo запущен; «нет», если нет.

см. Справочную страницу pgrep.

1 голос
/ 06 февраля 2014

Когда я знаю pid, я предпочитаю:

[ -d /proc/<pid> ] && echo OK || echo NO
0 голосов
/ 29 апреля 2014
if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';

grep -v grep гарантирует, что полученный результат не является оператором grep при выполнении.

0 голосов
/ 14 июня 2013

Существует также решение с grep:

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

Это хорошо работает в Debian 6, не уверен насчет других дистрибутивов. '{print $11}' необходимо, потому что система также рассматривает grep как процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...