Biorąc pod uwagę identyfikatory wyprodukowane przez wmctrl -l
, chciałbym móc zabić proces powiązany z identyfikatorem okna.
Jak sugerowałbyś to zrobić?
Biorąc pod uwagę identyfikatory wyprodukowane przez wmctrl -l
, chciałbym móc zabić proces powiązany z identyfikatorem okna.
Jak sugerowałbyś to zrobić?
Odpowiedzi:
Oprócz wyszczególnienia PID, jak opisano w innych odpowiedziach Floriana Diescha i Serga, możesz użyć -ic
opcji bezpośredniego zamknięcia okna:
$ wmctrl -ic 0x02e00085
Jeśli używasz wmctrl -lp
PID, są w trzeciej kolumnie.
Dla danego identyfikatora okna możesz użyć
kill $(wmctrl -lp | awk '/^WID/ {print $3}')
(zamień WID na swój identyfikator okna)
col3
.
wmctrl
faktycznie ma inną flagę -p
na liście 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
Gdy się o tym dowiesz, jest to trywialne ćwiczenie wyodrębnienia PID tego okna i przekazania go kill
wmctrl -lp | awk '/Window Title/{print $3}' | xargs kill
Możesz także użyć xkill -id [id]
. Narzędzie xkill działa inaczej niż inne odpowiedzi - zamiast zamykać okno lub bezpośrednio zabijać proces, instruuje serwer X, aby rozłączył klienta, który utworzył okno. Zwykle powoduje to zakończenie procesu nawet dla procesu zdalnego.
Zalety i wady każdego podejścia:
wmctrl -c
zamyka okno „z wdziękiem” - tak jakbyś sam kliknął przycisk zamykania menedżera okien. Może to nie zabić procesu i nawet nie zamknąć okna, jeśli aplikacja nie chce, aby okno zostało zamknięte lub zostało zawieszone.
Korzystanie z pid from wmctrl -lp
with kill
gwarantuje zabicie procesu, ale może wymagać dodatkowej pracy lub w ogóle nie działać, jeśli proces może być uruchomiony na innym komputerze.
xkill
może nie zakończyć procesu, jeśli jest zaprojektowany tak, aby móc przywrócić działanie po awarii serwera X lub utracie łączności z siecią, ale większość aplikacji po prostu zawiesi się w takich okolicznościach. W każdym razie okna znikną. Procesy zdalne i lokalne są obsługiwane identycznie.
użyć xkill
. Po prostu wpisz xkill
swój terminal i kliknij wymagane okno.
xkill