1

Я хочу проанализировать вывод команды ps и вернуть true или false, если программа найдена. Как кто-нибудь здесь сделал бы это? У меня есть доступ к командной строке, поэтому она открыта для меня, никаких ограничений.

5 ответов5

5

Передайте вывод в grep .

ps -ax | grep process_name | grep -v grep

Вышесказанное больше подходит для причинной проверки вещей вручную. Если вы хотите использовать что-то в скрипте, используйте возвращаемое значение из pidof:

pidof process_name

возвращает 0, если существует какой-либо процесс с указанным именем, и 1 в противном случае.

4

Используйте pgrep, как в pgrep pattern .

4

В общем случае вы должны искать свой СПЕЦИАЛЬНЫЙ процесс в списке процессов, а не что-то, что просто имеет одно и то же имя.

Ранее мы были укушены ошибками, когда процесс с тем же (или похожим) именем появляется и что-то ломается (обычно это скрипт монитора или запуска / остановки, поэтому обычно это не жизненно важно).

Ваш процесс должен записать pid-файл при запуске (или до того, как сценарий оболочки запишет свой pid, а затем выполнить вашу задачу), а затем вы можете обратиться к содержимому этого pid-файла в последующем сценарии оболочки.

Чтобы проверить, запущен ли конкретный pid, убейте его "сигналом 0" - это на самом деле не посылает сигнал, а просто проверяет, что он есть.

1

Я бы не рекомендовал подход ps и pipe через grep, потому что вы можете получить ложные срабатывания (особенно для коротких имен команд, которых много в UNIX), и вам придется прибегнуть к двойным grep и т.д., Чтобы понять это. , Вместо этого рассмотрите возможность использования опции -C ps чтобы напечатать pid процесса, который вас интересует.

Тем не менее, наилучшим подходом будет сохранить pid процесса, который вы породили в файле или в памяти процесса контроллера, чтобы вы знали его заранее и могли его искать.

0

используйте if pgrep APPLICATION > /dev/null then dox; фи

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .