уничтожьте процесс xterm в ударе

Итак, мне удалось его решить - возможно, это не самый элегантный способ, но он работает и достаточно хорош.

Сначала я написал небольшой сценарий:

#!/бин/ш. i3lock -i ~/Pictures/lock.png

Сохранил его (например, .locker) по адресу HOME, затем запустил "chmod +x . locker", чтобы я мог выполнить его, и в Custom Shortcuts на строку Command я написал ./.locker

Выбрать произвольный ярлык для него (мой - SUPER+L).

.
1
15.08.2014, 17:53
2 ответа

Когда вы запускаете сценарий с:

bash /tmp/test0&

, вы запускаете полностью отдельный процесс bash и переводите его в фоновый режим. Вы не можете видеть переменные, определенные в этом скрипте; они принадлежат другому процессу. Если вы хотите получить доступ к переменным, определенным в другом файле, загрузите этот файл в текущий процесс bash , используя . или источник команда :

. /tmp/test0

После этого вы сможете сказать $ pid в своем основном скрипте и получить значение, которое было установлено в другой файл.


Все это говорит о том, что то, как вы структурируете вещи, очень загадочно. В опубликованном вами сценарии есть много других ошибок, которые, как я полагаю, связаны с редактированием реальной ошибки для вопроса (вы используете $! , как если бы это переменная awk , но тогда ожидайте, что переменная, в которую вы ее скопировали, будет определена, например, в сценарии Bash, и test0 будет иметь много синтаксических ошибок). $! определяется только в Bash после запуска фонового процесса с помощью & : даже если ваша команда awk сработала, $ pid будет пустым. Если вы хотите таким образом получить PID процесса xterm , вам нужно запустить его как xterm ... & . bash / tmp / test0 & помещает скрипт test0 в фоновый режим, а не команду xterm .

Похоже, вам лучше вообще избавиться от test0 и просто запустить xterm из основного скрипта. Вероятно, стоит переосмыслить свои мысли на более высоком уровне . По крайней мере, посмотрите, что находится в вашем реальном файле test0 , и посмотрите, действительно ли это то, что вам нужно.

2
27.01.2020, 23:38

(Ваш сценарий bash не запускается, есть ошибки).

Так почему же pid не убивается? Это неправильный пид? Или, может быть, вам нужно принудительно убить его, используя kill -9 ?

Затем используйте pgrep , чтобы получить pid. Создайте новый xterm и сохраните pid в xtermPid_1:

$ xtermPid_1=$(pgrep --newest xterm)

(посмотрите справочные страницы pgrep, это хороший инструмент)

0
27.01.2020, 23:38

Теги

Похожие вопросы