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

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

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

  • Настройка сервера XDEC X для запуска приложения в истинном цвете на удаленном X-клиенте
  • Как обеспечить исключительную доступность процессора для текущего процесса?
  • Какой пакет мне нужен для libtool на Solaris?
  • Как удалить gnome-extra?
  • Почему несколько экземпляров Mate-терминала имеют один и тот же PID?
  • Что такое команда erepc? Это вредоносное ПО?
  • Как обрабатывать исключительную страницу при распределении смежных страниц кеша в Linux
  • Помещение Linux-процессов на определенные ядра ЦП
  • 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 поэтому ее также нужно перенаправить.

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