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ć -icopcji bezpośredniego zamknięcia okna:
$ wmctrl -ic 0x02e00085
Jeśli używasz wmctrl -lpPID, 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 .
wmctrlfaktycznie ma inną flagę -pna 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 -czamyka 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 -lpwith killgwarantuje 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.
xkillmoż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 xkillswój terminal i kliknij wymagane okno.
xkill