Как из bash проверить запущена ли программа, по ее имени.
Добавлено: 19 май 2019, 21:17
Часто при написании скриптов на bash возникает типичная задача - узнать, запущен ли процесс с определенным именем, и что-то сделать в случае его отсутствия/наличия. Почти всегда начинающие скриптописатели пытаются использовать для этого уже известную им команду ps прогоняя ее вывод через grep <имя_программы> в различных комбинациях. Не спорю - так тоже можно добиться желаемого. Но конструкция будет усложнена тем, что надо из вывода исключить еще реакцию на сам фрагмент grep <имя_программы> который окажется выводе ps, т.е. надо экранировать и т.д..
Тогда как имеется гораздо более простое для запоминания решение, через pidof. Команда выводит список pid запущенных процессов с заданным именем. (Что позволяет при желании даже узнать количество экземпляров запущенного процесса.) Но в простых случаях:
Можно еще проще:
Но здесь уже имя процесса должно быть одним словом без спецсимволов.
Или можно и еще проще:
Годится для выполнения одной команды. То что после "&&" запустится только в случае отсутствия запущенного процесса с заданным именем.
Тогда как имеется гораздо более простое для запоминания решение, через pidof. Команда выводит список pid запущенных процессов с заданным именем. (Что позволяет при желании даже узнать количество экземпляров запущенного процесса.) Но в простых случаях:
Код: Выделить всё
if [ "$(pidof <имя процесса>)" ]
then
<что-то делаем>
fi
Код: Выделить всё
if [ "`pidof <имя_процесса>`" ]
then
<что-то делаем>
fi
Или можно и еще проще:
pidof <имя_процесса> && <что-то делаем>
Годится для выполнения одной команды. То что после "&&" запустится только в случае отсутствия запущенного процесса с заданным именем.