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


9

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

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

Ответы:


10

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

$ wmctrl -ic 0x02e00085

3
Если процесс застрял, он может не заметить, что вы закрыли окно. Окно исчезнет, ​​но процесс все еще будет там и, возможно, потребит процессор и оперативную память.
kasperd

9

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

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

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

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


Может быть, чище вместо awk вы можете просто использоватьcol3 .
Пабло Бьянки

8

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

6

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

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

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

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.