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