Как я могу убить конкретное окно X

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

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

5 ответов

Решение

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

$ wmctrl -ic 0x02e00085

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

Для данного идентификатора окна вы можете использовать

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

(замените WID на ваш идентификатор окна)

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

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

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

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

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

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

Использование xkill, Просто введите xkill в вашем терминале и нажмите на нужное окно.

Xkill

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