Как я могу убить конкретное окно 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