У меня есть приложение 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
она не запущена.