Как узнать, открыта ли какая-либо программа

Используя командную строку в терминале, я хочу отобразить 1 если программа (например, Firefox или Chromium) открыта и 0 противном случае.

Edit: «open», я имею в виду «работает на текущем компьютере и имеет окно, открытое на X-сервере, который я вижу»

3 Solutions collect form web for “Как узнать, открыта ли какая-либо программа”

 xwininfo -root -children | grep -q '"Firefox")' echo "$(($? == 0))" 

Выпустил бы 1, если есть окно класса Firefox подключенное к вашему X-серверу (любым пользователем с любой машины).

Чтобы ограничить процессы Firefox локальными машинами, на которых вы выполняете эту команду:

 xwininfo -root -children | awk '/"Firefox"\)/{print $1}' | xargs -I% xprop -id % WM_CLIENT_MACHINE | cut -d\" -f2 | grep -qFx "$(uname -n)" 

Поиск по имени процесса не гарантирует, что процессы фактически отображают свое окно на вашем X-сервере.

Описанный выше метод согласуется с тем, как firefox проверяет текущий запущенный firefox, когда он не передан --no-remote .

pgrep -x chromium не будет соответствовать именам процессов, например chromium-foo , и > /dev/null может быть заменен на -q :

 pgrep -xq chromium; echo $(($? == 0)) 

pgrep не определен POSIX, и, к примеру, он не был включен в OS X до недавнего времени. Но вы также можете использовать ps :

 ps -eo comm= | grep -xq chromium; echo $(($? == 0)) # GNU ps -eco comm= | grep -xq chromium; echo $(($? == 0)) # OS X ps -eo comm= | sed 's|.*/||' | grep -xq chromium; echo $(($? == 0)) # either 

В OS X -o comm печатает абсолютные пути команд и -co comm prints basenames. В GNU -o comm печатает basenames и -c не определен.

Существует несколько способов проверить, запущен ли процесс с определенным именем. Один из них – использовать pgrep а другой – использовать ps :

 pgrep "chromium" >/dev/null 2>&1 && echo 1 || echo 0 ps aux | grep "[c]hromium" >/dev/null 2>&1 && echo 1 || echo 0 grep "[c]hromium" <(ps aux) >/dev/null 2>&1 && echo 1 || echo 0 

Команда pgrep ищет процессы на основе их имени и отображает PID любого процесса, который соответствует его аргументу. Здесь вместо его вывода используется возвращаемое значение pgrep (следовательно, перенаправление на /dev/null ), поэтому мы знаем, что что-то согласовано или нет. Команда grep также отображает совпадения с stdout поэтому ее также нужно перенаправить.

  • Отчетность cpu hogs
  • Почему несколько экземпляров Mate-терминала имеют один и тот же PID?
  • Что такое фоновые и передние процессы в рабочих местах
  • Монтирование вместе пять gifs
  • Как установить из командной строки в Arch Linux?
  • Перезагрузка Debian Wheezy вместо отключения питания
  • Как удалить gnome-extra?
  • Помещение Linux-процессов на определенные ядра ЦП
  • Удаленная поддержка: маршрутизация RDP через туннель ssh?
  • Как убедиться, что процесс начал читать файл перед продолжением?
  • Завершите мой (резервный) жесткий диск в Linux, когда я его не использую
  • «Текущее» окно терминала на команду shell / executable?
  • Interesting Posts

    Какой умный способ подсчитать количество дней с X?

    davmail systemd запускает на безголовом сервере

    Любой серьезный риск, если Mint 17 считает Ubuntu?

    Как печатать ip с iftop, отсортированным по использованию полосы пропускания

    Как мне увеличить прокрутку окна iterm (tmux) (не прокрутку строки)

    пустые 70-persistent-net.rules на SuSe 13.1 и Ethernet-устройстве, называемые eno1

    Почему у / proc / self / fd / 0 нет бит записи в последовательном сеансе перед запуском оболочки?

    поиск строк в шаблонах сопоставления файлов, определенных в другом файле

    Найти все видеофайлы с длительностью в заданном интервале от командной строки

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

    Скопировать файлы с длинными именами

    Какое программное обеспечение поддерживает стандарт DoD 5220-22-M 7 для SLES 10.4?

    Как я могу использовать цикл внутри команды?

    почему на моем рабочем столе работает шесть процессов getty?

    Как измерить время выполнения программы и сохранить ее внутри переменной

    Linux и Unix - лучшая ОС в мире.