Как проверить с помощью Bash-скрипта, запущено ли приложение?

Как проверить с помощью Bash-скрипта, запущено ли приложение?

У меня есть приложение gnome-run в моей домашней папке. Теперь я добавил приложение для запуска при нажатии Meta+ R(я добавил его вККСМ). Я запускаю приложение, выполняя его ./gnome-runв своей домашней папке.
Я не могу найти никаких следов процесса приложения в выводе ps -A.

Проблема в том, что если у меня открыта программа gnome-run и я нажимаю комбинацию клавиш, я хочу, чтобы приложение закрылось. Есть ли способ создать bash-файл, который проверяет, запущено ли приложение? Если запущено, то закрыть его, иначе запустить.

решение1

Этот скрипт оболочки должен управлять запуском и остановкой любой программы:

#!/bin/bash

BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
    echo "at least one instance of "$BASECMD" found, killing all instances"
    kill $PID
else
    echo "no running instances of "$BASECMD" found, starting one"
    $1
 fi

допустим, вы сохранили его под именем ~/mystarter, вы можете выполнить любую команду с ним, используя ~/mystarter <name>, например, в вашем случае, привяжите Meta+ Rк:

~/mystarter gnome-run

и убедитесь, что скрипт является исполняемым: chmod u+x ~/mystarter. Также, вероятно, лучше всего поместить его где-нибудь в вашем PATH, чтобы вам не пришлось каждый раз вводить его полное местоположение.

Что касается того, что gnome-runне отображается в ps -A, убедитесь, что сам gnome run не является скриптом, который запускает реальный процесс. Проверьте, есть ли разница между ps -A | wc -lдо и после запуска (это учитывает все запущенные процессы).

Редактировать:

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

 ./mystarter 'cmd args'

например:

./mystarter 'ncmpcpp -c ~/.ncmpcpp'

Команда просто проверяет ncmpcpp, запущена ли она уже, но выполняет полную команду (с аргументами), если ncmpcppона не запущена.

Связанный контент