Как я могу уничтожить определенное X-окно

Учитывая идентификаторы, произведенные wmctrl -l, Я хотел бы смочь уничтожить процесс, связанный с окном ID.

Как Вы предложили бы сделать это?'

9
задан 5 October 2016 в 02:31

5 ответов

Помимо списка PID, как описано в других ответах Florian Diesch и Serg, можно использовать -ic опция закрыть окно непосредственно:

$ wmctrl -ic 0x02e00085
10
ответ дан 23 November 2019 в 04:46

wmctrl фактически имеет другой флаг -p для перечисления PID.

bash-4.3$ wmctrl -lp
0x0380000a  0 4410   eagle Desktop
0x04800006  0 4275   eagle XdndCollectionWindowImp
0x04800009  0 4275   eagle unity-launcher
0x0480000c  0 4275   eagle unity-panel
0x0480000f  0 4275   eagle unity-dash
0x04800010  0 4275   eagle Hud

Как только вы это знаете, это тривиальное упражнение по извлечению PID этого окна и передаче его в kill

wmctrl -lp | awk '/Window Title/{print $3}' | xargs kill
8
ответ дан 23 November 2019 в 04:46

Если Вы используете wmctrl -lp, PIDs находятся в третьем столбце.

Для данного окна ID можно использовать

kill $(wmctrl -lp | awk '/^WID/ {print $3}')

(замените WID окном ID)

9
ответ дан 23 November 2019 в 04:46

используйте xkill. Просто тип xkill в Вашем терминале и нажимает на необходимое окно.

xkill

1
ответ дан 23 November 2019 в 04:46

Можно также использовать xkill -id [id]. xkill утилита работает по-другому по сравнению с другими ответами - вместо того, чтобы закрыть окно или уничтожить процесс непосредственно, это дает X-серверу команду разъединять клиент, который создал окно. Это обычно имеет эффект того, чтобы заставлять процесс завершиться даже для удаленного процесса.

Преимущества и недостатки к каждому подходу:

  • wmctrl -c закрывает окно "корректно" - как будто Вы нажали близкую кнопку менеджера окон сами. Это не может уничтожить процесс, и он даже не может закрыть окно, если приложение не хочет, чтобы окно было закрыто или замораживается.

  • Используя pid от wmctrl -lp с kill как гарантируют, уничтожит процесс, но может потребовать дополнительной работы или не работать вообще, если процесс может работать на другой машине.

  • xkill может не завершить процесс, если он разработан, чтобы смочь восстановиться с катастрофического отказа X-сервера или потери сетевого соединения, но большинство приложений просто откажет при этих обстоятельствах. В любом случае окна закончатся. И удаленные процессы и локальные обрабатываются тождественно.

6
ответ дан 23 November 2019 в 04:46

Другие вопросы по тегам:

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