Wie kann ich ein bestimmtes X-Fenster beenden?

9

Angesichts der von erstellten IDs wmctrl -lmöchte ich den mit der Fenster-ID verknüpften Prozess beenden können.

Wie würden Sie vorschlagen, es zu tun? '

user123456
quelle

Antworten:

10

Neben der Auflistung der PID, wie in anderen Antworten von Florian Diesch und Serg beschrieben, können Sie die -icOption verwenden, um das Fenster direkt zu schließen:

$ wmctrl -ic 0x02e00085
Nykakin
quelle
3
Wenn der Prozess nicht funktioniert, wird möglicherweise nicht bemerkt, dass Sie das Fenster geschlossen haben. Das Fenster wird weg sein, aber der Prozess wird immer noch da sein und möglicherweise CPU und RAM verbrauchen.
Kasperd
9

Wenn Sie wmctrl -lpdie PIDs verwenden, befinden Sie sich in der dritten Spalte.

Für eine bestimmte Fenster-ID können Sie verwenden

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

(Ersetzen Sie WID durch Ihre Fenster-ID)

Florian Diesch
quelle
Vielleicht sauberer statt awk können Sie einfach verwendencol3 .
Pablo Bianchi
8

wmctrlhat tatsächlich ein anderes Flag -pzum Auflisten der 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

Sobald Sie dies wissen, ist es eine triviale Übung, die PID dieses Fensters zu extrahieren und an sie weiterzugeben kill

wmctrl -lp | awk '/Window Title/{print $3}' | xargs kill
Sergiy Kolodyazhnyy
quelle
6

Sie können auch verwenden xkill -id [id]. Das Dienstprogramm xkill funktioniert anders als die anderen Antworten. Anstatt das Fenster zu schließen oder den Prozess direkt abzubrechen , weist es den X-Server an, den Client, der das Fenster erstellt hat, zu trennen. Dies führt normalerweise dazu, dass der Prozess auch für einen Remote-Prozess beendet wird.

Vor- und Nachteile für jeden Ansatz:

  • wmctrl -cschließt ein Fenster "elegant" - als hätten Sie selbst auf die Schaltfläche zum Schließen des Fenstermanagers geklickt. Dadurch wird der Prozess möglicherweise nicht abgebrochen und das Fenster wird möglicherweise nicht geschlossen, wenn die Anwendung nicht möchte, dass das Fenster geschlossen wird oder eingefroren wird.

  • Die Verwendung der PID von wmctrl -lpwith beendet killden Prozess garantiert, erfordert jedoch möglicherweise zusätzliche Arbeit oder funktioniert überhaupt nicht, wenn der Prozess möglicherweise auf einem anderen Computer ausgeführt wird.

  • xkillDer Prozess wird möglicherweise nicht beendet, wenn er nach einem Absturz des X-Servers oder einem Verlust der Netzwerkverbindung wiederhergestellt werden kann. Die meisten Anwendungen stürzen jedoch unter diesen Umständen einfach ab. In jedem Fall werden die Fenster weg sein. Remote-Prozesse und lokale Prozesse werden identisch behandelt.

Random832
quelle
1

verwenden xkill. Geben xkillSie einfach Ihr Terminal ein und klicken Sie auf das gewünschte Fenster.

xkill

Abhishek Dhanraj Shahdeo
quelle