Учитывая идентификаторы, созданные wmctrl -l
мной, я хотел бы иметь возможность убить процесс, связанный с идентификатором окна.
Как бы вы предложили это сделать?
Учитывая идентификаторы, созданные wmctrl -l
мной, я хотел бы иметь возможность убить процесс, связанный с идентификатором окна.
Как бы вы предложили это сделать?
Ответы:
Помимо перечисления PID, как описано в других ответах Florian Diesch и Serg, вы можете использовать -ic
опцию, чтобы закрыть окно напрямую:
$ wmctrl -ic 0x02e00085
Если вы используете wmctrl -lp
PIDs находятся в третьем столбце.
Для данного идентификатора окна вы можете использовать
kill $(wmctrl -lp | awk '/^WID/ {print $3}')
(замените WID на ваш идентификатор окна)
col3
.
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
закрывает окно "изящно" - как будто вы нажали кнопку закрытия оконного менеджера самостоятельно. Это может не убить процесс и даже не закрыть окно, если приложение не хочет, чтобы окно было закрыто или было заморожено.
Использование pid из wmctrl -lp
with kill
гарантирует завершение процесса, но может потребовать дополнительной работы или вообще не работать, если процесс может выполняться на другом компьютере.
xkill
может не завершить процесс, если он предназначен для восстановления после сбоя X-сервера или потери сетевого подключения, но большинство приложений просто аварийно завершают работу в этих условиях. В любом случае окна исчезнут. И удаленные, и локальные процессы обрабатываются одинаково.
использовать xkill
. Просто введите xkill
свой терминал и нажмите на нужное окно.
Xkill