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

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
slant
Сообщения: 4504
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1992 раза
Контактная информация:

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

#1

19 май 2019, 21:17

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

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

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

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

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

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

Аватара пользователя

madesta
Сообщения: 2011
Зарегистрирован: 11 июн 2017, 21:47
Решено: 29
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 431 раз
Контактная информация:

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

#2

01 июл 2019, 22:32

Столкнулся с ситуацией в 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 КБ) 2086 просмотров
Может быть есть идеи как выйти из положения?

Аватара пользователя

FreeStyler
Сообщения: 798
Зарегистрирован: 23 июл 2018, 07:58
Решено: 6
Откуда: Сиб
Благодарил (а): 756 раз
Поблагодарили: 94 раза
Контактная информация:

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

#3

03 июл 2019, 13:32

madesta, сёрчится же на раз-2
https://duckduckgo.com/?q=ubuntu+list+o ... cal&ia=web

Т.к. либра запускает все экземпляры окон в одном процессе - поможет только wmctrl -l
xlsclients почему-то не даёт инфу о заголовке, если ему ID отправить -__-
А если просто запустить и тыкнуть в окно, то даёт... -___-
deadmau5 - Harmonic Mix
■ KDE Neon 22.04 (UE) @ Lenovo IdeaPad 3-15 Ryzen 5 4500U, 18 Гб DDR-4, 128 Gb SSD +1 Gb SSD 1920x1080

Закрыто

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей