Я хочу проанализировать вывод команды ps и вернуть true или false, если программа найдена. Как кто-нибудь здесь сделал бы это? У меня есть доступ к командной строке, поэтому она открыта для меня, никаких ограничений.
5 ответов
Передайте вывод в grep
.
ps -ax | grep process_name | grep -v grep
Вышесказанное больше подходит для причинной проверки вещей вручную. Если вы хотите использовать что-то в скрипте, используйте возвращаемое значение из pidof
:
pidof process_name
возвращает 0, если существует какой-либо процесс с указанным именем, и 1 в противном случае.
Используйте pgrep, как в pgrep pattern
.
В общем случае вы должны искать свой СПЕЦИАЛЬНЫЙ процесс в списке процессов, а не что-то, что просто имеет одно и то же имя.
Ранее мы были укушены ошибками, когда процесс с тем же (или похожим) именем появляется и что-то ломается (обычно это скрипт монитора или запуска / остановки, поэтому обычно это не жизненно важно).
Ваш процесс должен записать pid-файл при запуске (или до того, как сценарий оболочки запишет свой pid, а затем выполнить вашу задачу), а затем вы можете обратиться к содержимому этого pid-файла в последующем сценарии оболочки.
Чтобы проверить, запущен ли конкретный pid, убейте его "сигналом 0" - это на самом деле не посылает сигнал, а просто проверяет, что он есть.
Я бы не рекомендовал подход ps и pipe через grep, потому что вы можете получить ложные срабатывания (особенно для коротких имен команд, которых много в UNIX), и вам придется прибегнуть к двойным grep и т.д., Чтобы понять это. , Вместо этого рассмотрите возможность использования опции -C
ps
чтобы напечатать pid процесса, который вас интересует.
Тем не менее, наилучшим подходом будет сохранить pid процесса, который вы породили в файле или в памяти процесса контроллера, чтобы вы знали его заранее и могли его искать.
используйте if pgrep APPLICATION > /dev/null
then dox; фи