Предысторией вопроса является желание "мягкого" старта autokey-gtk, то есть с задержкой. Желание задержки обусловлено тем, что при простом "Automatically start Autoley at login" в настройках программы временами появляется сообщение, что autokey-gtk запущен, pid процесса имеется, но программа не отвечает. Соответственно, "горячие" клавиши на различные операции не работают.
Для уточнения системы: Linux Mint 18.3 xfce 64 bit
Первоначальное решение с записью в автостарте (Сеансы и запуск - Автозапуск) /home/minter/scripts/autokey.sh
Код: Выделить всё
#!/bin/bash
sleep 65
autokey-gtk
sleep 10
exit
привело лишь к частичному успеху. Всё отрабатывается, но команда exit не проходит. Процесс autokey.sh остаётся активным.
Пришлось сделать второй скрипт, также запускаемый с задержкой: sh -c "sleep 75 && /home/minter/scripts/autokey-stop.sh"
Код: Выделить всё
#!/bin/bash
OUTPUT="$(pgrep autokey.sh)"
kill -15 ${OUTPUT}
exit
и в autokey.sh убрать команды sleep 10 и exit. Только тогда после отработки всех команд "лишние" процессы исчезают и остаётся только процесс autokey-gtk, что и является решением этой частной задачи.
Не могу ответить на 2 вопроса.
1. Почему не проходит команда exit в первоначальной версии autokey.sh
2. Почему pidof autokey.sh не возвращает номера pid и чтобы его найти необходима команда pgrep autokey.sh
Может кто из знающих подскажет?
Решение
slant » 20 июл 2019, 23:24
madesta писал(а): ↑20 июл 2019, 22:53
1. Почему не проходит команда exit в первоначальной версии autokey.sh
Потому что скрипт запуская autokey-gtk, ждет его завершения перед исполнением следующей строчки. Чтобы такого не было, попробуйте строчку поменять так:
autokey-gtk &
madesta писал(а): ↑20 июл 2019, 22:53
2. Почему pidof autokey.sh не возвращает номера pid и чтобы его найти необходима команда pgrep autokey.sh
Потому что это скрипт а не программа. pidof вернет pid'ы только полноценных программ которые выполняются в самой системе, а скрипты таковыми не являются. Их исполняет командный интерпретатор (bash или sh скорее всего) - вот для них то pid'ы и будут возвращены, если запросить.
P.S. Есть еще такая команда: killall - ей можно скормить просто имя (а не pid) программы которую нужно прибить (или сигналом дернуть).
Перейти к ответу ➙