Linux запущена ли программа

Как узнать, какие фоновые программы работают в Linux?

Запустите процесс Unix в фоновом режиме

  1. Чтобы запустить программу подсчета, которая будет отображать идентификационный номер процесса задания, введите: count https://bloground.ro/ru/%D0%BA%D0%B0%D0%BA-%D1%83%D0%B7%D0%BD%D0%B0%D1%82%D1%8C-%D0%B7%D0%B0%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%B0-%D0%BB%D0%B8-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0-%D0%B2-linux/» target=»_blank»]bloground.ro[/mask_link]

    Linux / Unix команда, чтобы определить, запущен ли процесс?

    Мне нужна независимая от платформы (Linux/Unix | OSX) оболочка /bash команда, которая определит, работает ли какой-либо конкретный процесс. например mysqld , httpd . Каков самый простой способ/команда для этого?

    Highway of Life 02 фев. 2012, в 16:05
    Поделиться
    NPE 02 фев. 2012, в 18:08

    Поделиться:

    12 ответов

    Лучший ответ

    Хотя pidof и pgrep являются отличными инструментами для определения того, что работает, они, к сожалению, недоступны в некоторых операционных системах. Определенным отказоустойчивым было бы следующее: ps cax | grep command

    Top 10 Linux Job Interview Questions

    Выход на Gentoo Linux:

    14484 ? S 0:00 apache2 14667 ? S 0:00 apache2 19620 ? Sl 0:00 apache2 21132 ? Ss 0:04 apache2

    Выход на OS X:

    42582 ?? Z 0:00.00 (smbclient) 46529 ?? Z 0:00.00 (smbclient) 46539 ?? Z 0:00.00 (smbclient) 46547 ?? Z 0:00.00 (smbclient) 46586 ?? Z 0:00.00 (smbclient) 46594 ?? Z 0:00.00 (smbclient)

    В Linux и OS X grep возвращает код выхода, поэтому легко проверить, был ли найден процесс или нет:

    #!/bin/bash ps cax | grep httpd > /dev/null if [ $? -eq 0 ]; then echo «Process is running.» else echo «Process is not running.» fi

    Кроме того, если вам нужен список PID, вы можете легко grep для них:

    ps cax | grep httpd | grep -o ‘^[ ]*[0-9]*’

    Выходные данные в Linux и OS X одинаковы:

    3519 3521 3523 3524

    Вывод следующего представляет собой пустую строку, что делает этот подход безопасным для процессов, которые не выполняются:

    echo ps cax | grep aasdfasdf | grep -o ‘^[ ]*[0-9]*’

    Этот подход подходит для написания простого теста пустой строки, а затем итерации через обнаруженные PID.

    #!/bin/bash PROCESS=$1 PIDS=`ps cax | grep $PROCESS | grep -o ‘^[ ]*[0-9]*’` if [ -z «$PIDS» ]; then echo «Process not running.» 1> do echo $PID done fi

    Вы можете протестировать его, сохранив его в файле (с именем «running» ) с разрешениями на выполнение (chmod + x running) и выполнив его с помощью параметра: ./running «httpd»

    #!/bin/bash ps cax | grep httpd if [ $? -eq 0 ]; then echo «Process is running.» else echo «Process is not running.» fi

    ВНИМАНИЕ.

    Пожалуйста, имейте в виду, что вы просто разбираете вывод ps ax , что означает, что, как видно на выходе Linux, это не просто сопоставление процессов, но и аргументы, переданные этой программе. Я настоятельно рекомендую быть максимально конкретным при использовании этого метода (например, ./running «mysql» также будет соответствовать процессам «mysqld» ). Я настоятельно рекомендую использовать which для проверки возможного полного пути.

    Linux File Permissions: Commands with Examples — Linux Tutorial 6

    Литература:

    Caleb Gray 02 фев. 2012, в 20:12
    Поделиться
    Ах! Отличное использование кода выхода grep.

    Caleb Gray 03 фев. 2012, в 15:42

    Процесс может быть запущен, но остановлен. Поэтому, если целью является проверка того, что mysqld или httpd «работают» (отвечает), вам также следует проверить, остановлен он или нет.

    oluc 02 май 2013, в 08:16

    Извините, но, хотя ответ, конечно, правильный с семантической точки зрения, я полностью против попытки найти процесс путем сопоставления с образцом в векторе процесса arg. Любой такой подход рано или поздно обречен на провал (вы фактически признаете это сами, говоря, что нужно больше проверок). Я добавил свою рекомендацию в отдельный ответ.

    peterh 03 окт. 2013, в 10:41

    grep также будет работать (например, ps cax | grep randomname всегда будет возвращать 0, потому что grep находит grep randomname (надеюсь, это понятно . ). Одним из исправлений является добавление квадратных скобок вокруг первой буквы имени процесса, например, ps cax | grep [r]andomname .

    Kyle G. 29 окт. 2013, в 03:19
    ps cax | rev | cut -f1 -d’ ‘ | rev будет показывать только имя столбца, для облегчения анализа.
    Tyzoid 21 май 2015, в 14:56

    ps cax не может полностью выводить имя команды. Например, он печатает «хром-браузер» вместо «хром-браузер».

    jarno 18 июнь 2015, в 22:24
    jarno 19 июнь 2015, в 10:24
    Kyle G. 19 июнь 2015, в 20:45
    Показать ещё 6 комментариев

    ВЫ ДОЛЖНЫ знать ПИД-код!

    Поиск процесса путем попытки распознавания образов в аргументах процесса (например, pgrep «mysqld» ) — это стратегия, которая рано или поздно обречена на провал. Что делать, если у вас есть два mysqld? Забудьте о таком подходе. Вы МОЖЕТЕ исправить это временно, и МОЖЕТ РАБОТАть год или два, но потом что-то происходит, о чем вы не думали.

    Идентификатор процесса (pid) действительно уникален.

    Всегда сохраняйте pid, когда вы запускаете что-то в фоновом режиме. В Bash это можно сделать с помощью переменной $! Bash. Сделав это, вы сэкономите себя.

    Как определить, работает ли процесс (pid)

    Итак, теперь возникает вопрос, как узнать, работает ли pid.

    ps -o pid= -p

    Это POSIX и, следовательно, переносимый. Он вернет сам pid, если процесс запущен или ничего не возвращает, если процесс не запущен. Строго говоря, команда вернет один столбец pid , но так как мы указали на пустой заголовок заголовка (материал, непосредственно предшествующий знаку равенства), и это единственный запрашиваемый столбец, то команда ps не будет использовать заголовок вообще. Это то, что мы хотим, потому что оно упрощает синтаксический анализ.

    Это будет работать на Linux, BSD, Solaris и т.д.

    Другая стратегия — проверить значение выхода из вышеприведенной команды ps . Он должен быть равен нулю, если процесс запущен и не равен нулю, если это не так. Спецификация POSIX говорит, что ps должен выйти > 0, если произошла ошибка, но мне непонятно, что представляет собой «ошибка». Поэтому я лично не использую эту стратегию, хотя я уверен, что она будет работать и на всех платформах Unix/Linux.

    peterh 14 фев. 2013, в 18:01
    Поделиться

    За исключением того, что это не отвечает на вопрос, который должен определить, работает ли служба. PID не будет известно , в таких случаях, поэтому этот ответ действителен только , если вы знаете PID.

    Highway of Life 14 нояб. 2013, в 22:56

    Неправильно. Весь мой смысл в комментарии заключается в том, чтобы сделать шаг назад и сказать, что если вы впервые оказались в ситуации, когда вам нужно выполнить какую-то форму grep чтобы найти данный процесс, то вы сделали что-то не так, когда начали процесс, имхо. Я беру это из вопроса ОП, что он действительно контролирует процесс запуска.

    peterh 16 нояб. 2013, в 09:40

    Более правильным «термином» для вопроса OP должен был быть «кроссплатформенная команда, чтобы определить, запущена ли служба», это не та же система, которая выполняет проверку, а внешняя система, поэтому PID просто не будет известен вообще.

    Highway of Life 18 нояб. 2013, в 17:42

    То, будет ли известен PID, зависит от того, управляете ли вы процессом запуска или нет. Это не зависит от того, где вы делаете проверку. Вы можете реализовать свой собственный сервис is-service-running? (который использует сохраненный PID) на данном хосте, который затем может быть вызван с удаленного хоста. Но опять же: если вы не контролируете процесс запуска сервиса, тогда я понимаю вашу точку зрения.

    peterh 20 нояб. 2013, в 14:46

    Да, но сценарии не зависят друг от друга. Вот почему ps cax | grep оказался очень надежным и простым решением.

    Highway of Life 20 нояб. 2013, в 22:15

    Как определить, работает ли процесс (по pid) именно то, что я искал. Я был удивлен, что все вопросы в моих результатах поиска были о том, как найти pid.

    ShadSterling 20 янв. 2016, в 22:33

    Это не надежно. Интересующий вас процесс мог умереть после того, как система проработала достаточно долго, чтобы обернуть PID, и тогда другому процессу мог быть назначен тот же PID, который вы проверяете. stackoverflow.com/questions/11323410/linux-pid-recycling

    claymation 15 апр. 2016, в 03:28
    peterh 15 апр. 2016, в 05:54
    Показать ещё 6 комментариев

    В большинстве дистрибутивов Linux вы можете использовать pidof (8).

    Он распечатает идентификаторы процессов всех запущенных экземпляров определенных процессов или ничего, если экземпляры не запущены.

    Например, в моей системе (у меня есть четыре экземпляра bash и один экземпляр remmina ):

    $ pidof bash remmina 6148 6147 6144 5603 21598

    В других Unices, pgrep или комбинация ps и grep будут достигать того же, что и другие по праву отметили.

    Источник: overcoder.net

    Как узнать запущен ли процесс?

    Когда его запускаю, то все работает, но со временем, он перестает работать.
    Перезапускаю его и он опять работает
    Как проверить, что он работает в текущий момент?

    1) Проверяю pid, он существует:

    2) Проверяю процессы:

    Запускаю его через rc-local.service, для этого создал файл

    /etc/rc.local#!/bin/sh -e watcher.py stop watcher.py start exit 0

    PS. «watcher.py stop» прописал, так как иногда выдает ошибку, что он уже запущен. Наверное смотрит, что PID создан.

    Создал службу, прописал в файле
    /etc/systemd/system/rc-local.service

    [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target

    Дал ему права и поставил в запуск:

    chmod +x /etc/rc.local systemctl enable rc-local systemctl start rc-local

    PS. Думаю поставить его на ежедневную перезагрузку в cron. Но пока интересно, как отследить его «падение».

    • Вопрос задан более трёх лет назад
    • 922 просмотра

    Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru