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

9

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

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

    
задан user123456 05.10.2016 в 09:31
источник

5 ответов

10

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

$ wmctrl -ic 0x02e00085
    
ответ дан Nykakin 05.10.2016 в 09:54
источник
9

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

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

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

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

    
ответ дан Florian Diesch 05.10.2016 в 09:45
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 }' | xargs kill
    
ответ дан Sergiy Kolodyazhnyy 05.10.2016 в 09:46
6

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

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

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

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

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

ответ дан Random832 05.10.2016 в 16:02
1

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

  

Xkill

    
ответ дан Abhishek Dhanraj Shahdeo 06.10.2016 в 08:51