Страница 1 из 1

Как из bash проверить запущена ли программа, по ее имени.

Добавлено: 19 май 2019, 21:17
slant
Часто при написании скриптов на bash возникает типичная задача - узнать, запущен ли процесс с определенным именем, и что-то сделать в случае его отсутствия/наличия. Почти всегда начинающие скриптописатели пытаются использовать для этого уже известную им команду ps прогоняя ее вывод через grep <имя_программы> в различных комбинациях. Не спорю - так тоже можно добиться желаемого. Но конструкция будет усложнена тем, что надо из вывода исключить еще реакцию на сам фрагмент grep <имя_программы> который окажется выводе ps, т.е. надо экранировать и т.д..
Тогда как имеется гораздо более простое для запоминания решение, через pidof. Команда выводит список pid запущенных процессов с заданным именем. (Что позволяет при желании даже узнать количество экземпляров запущенного процесса.) Но в простых случаях:

Код: Выделить всё

if [ "$(pidof <имя процесса>)" ]
then
 <что-то делаем>
fi
Можно еще проще:

Код: Выделить всё

if [ "`pidof <имя_процесса>`" ]
then
 <что-то делаем>
fi
Но здесь уже имя процесса должно быть одним словом без спецсимволов.

Или можно и еще проще:
pidof <имя_процесса> && <что-то делаем>
Годится для выполнения одной команды. То что после "&&" запустится только в случае отсутствия запущенного процесса с заданным именем.

Как из bash проверить запущена ли программа, по ее имени.

Добавлено: 01 июл 2019, 22:32
madesta
Столкнулся с ситуацией в Libre Office. Нужно было в скрипте смотреть наличие/отсутствие запущенного редактора Writer.
pidof writer результата не принёс. Оказывается, нужно было запрашивать pidof oosplash
Ни за что не догадался бы!
pidof.png
$ pidof oosplash
24706


Но из любопытства возник другой вопрос. При работающем Writer был запущен LibreOffice Calc. Вот этого процесса найти не удалось.
calc.png
Потом попробовал обратную ситуацию: сначала запустил Calc, а потом Writer. В диспетчере задач было видно как стартует процесс oospash --writer, а потом уничтожается. При запросе oospash находится уже только Calc, несмотря на то, что Writer тоже работает.
writer.png
writer.png (8.15 КБ) 3215 просмотров
Может быть есть идеи как выйти из положения?

Как из bash проверить запущена ли программа, по ее имени.

Добавлено: 03 июл 2019, 13:32
FreeStyler
madesta, сёрчится же на раз-2
https://duckduckgo.com/?q=ubuntu+list+o ... cal&ia=web

Т.к. либра запускает все экземпляры окон в одном процессе - поможет только wmctrl -l
xlsclients почему-то не даёт инфу о заголовке, если ему ID отправить -__-
А если просто запустить и тыкнуть в окно, то даёт... -___-