Verwechseln Sie die Frage hier nicht mit der grafischen Auflistung von Prozessen, das ist nicht das, was ich frage.
Wie kann ich im Terminal sehen, welche Prozesse eine GUI haben? wie in Sachen wie Firefox, VLC, Geany, Nautilus etc ... haben alle eine GUI. Ich möchte weitere Informationen darüber, welche Prozesse Windows Manager-Ressourcen verwenden, und ich möchte dies vom Terminal aus tun.
Wie erhalte ich weitere Informationen zu DIESEN Prozesstypen?
Ich habe versucht, den ps
Befehl zu verwenden, aber ich würde jeden Terminalbefehl unterhalten, um dieses Problem zu lösen.
UPDATE: Ich sehe etwas, das mir gefällt pstree
, nämlich den Baum, aus dem alle grafischen Prozesse hervorgehen, die mich interessieren:
$ pstree init─┬─ │ ├─lightdm─┬─Xorg │ ├ lightdm─┬─init─┬─ │ │ │ ├ Firefox───55 * [{Firefox}] │ │ │ ├ggeany─┬─bash │ │ │ │ │ │ │ ├gnome-terminal─┬─bash───pstree
Antworten:
Versuchen Sie es
xrestop
oderxrestop -b
.Es ist beabsichtigt zu messen, wie viele X-Ressourcen jedes X-Fenster verbraucht, aber als kleiner Bonus werden der Name der Fenster und die entsprechenden PIDs identifiziert.
quelle
xlsclients
ist nah (und ein Standardteil von X), listet es die Clients des X-Servers auf. Aber könnte es nicht sein , eine 1: 1 - Zuordnung zwischen dem, was man bedenkt , eine „Anwendung“ und was X betrachtet einen „Client“. Meine einzelne laufende Instanz von LyX verbraucht beispielsweise 13 Clients. Wenn ichxlsclients -l
(Langformausgabe) verwende, kann ich sehen, dass nur einer von ihnen einen definierten "Symbolnamen" hat, dies ist jedoch nur ein Hinweis. Da es verwendet wirdXQueryTree()
, fehlen möglicherweise einige Fenster (es werden keinexpdf
Fenster gefunden, die ich geöffnet habe).Es gibt auch nicht sehr viele Informationen. Sie können jedoch
xlsclients -l
die Fenster-ID abrufen und jedes Fenster mit abfragenxprop -id $ID
. Verwendenxwinifo
Sie für weitere Details zu einem Fenster, obwohl es sich um "Fenster" handelt, die nicht mit Clients oder Anwendungen identisch sind:Abhängig von Ihrem Fenstermanager können Sie möglicherweise bestimmte Fenstereigenschaften (z. B.
_NET_xxx
oder_NET_WM_xxxx
Eigenschaften ) überprüfen, um festzustellen, ob es sich um eine "Anwendung" handelt. Wenn derFenstermanager-Client oder die GUI-Bibliothek dies festlegt (was auch immer zeitgemäß sein sollte), ist die_NET_WM_PID
Eigenschaft die einfachste ( wenn auch unvollständige ) Möglichkeit, eine PID einem bestimmten Fenster zuzuordnen. Ich kenne kein Werkzeug, das all diese Teile zusammenhält.Ich benutze den Fenstermanager FVWM, ich kann direkt mit ihm sprechen
FvwmCommand
, zBFvwmCommand -i1 send_windowlist
zeigt mir die Liste der Fenster. @Arkadiusz 'Vorschlag zur Verwendungwmctrl
scheint eine gute und Fenstermanager-agnostische Methode zu sein, um dasselbe zu tun.Ein weiterer Trick besteht darin, die Stammfenster abzufragen
_WIN_CLIENT_LIST
überbash
:Dies entspricht genau dem, was meine WM als Fenster auflistet (ohne die, die ich so konfiguriert habe, dass sie von der WM-Fensterliste ausgeschlossen werden). Untergeordnete Fenster werden
WM_CLIENT_LEADER
auf das übergeordnete Fenster festgelegt (für die Sitzungsverwaltung ), obwohl das übergeordnete Fenster möglicherweise nicht sichtbar ist (Firefox führt dies aus) und möglicherweise auf sich selbst verweist.xrestop
bekommt aber meine Stimme.quelle
Wenn Sie einen EWMH- kompatiblen Fenstermanager verwenden, können Sie es auch
wmctrl
versuchen. Es kann allewindows being managed by the window manager
+ ihre PIDs auflisten:quelle
Ja, dafür brauchst du X. Aber ich kenne kein Tool, das dies sofort erledigt.
Eine App mit einer GUI ist ein Client auf dem lokalen X-Server. Ein Client auf dem lokalen X-Server ist jedoch nicht unbedingt eine App mit einer grafischen Benutzeroberfläche. Außerdem ist ein Client auf dem lokalen X-Server nicht unbedingt ein lokaler Prozess, und ein lokaler Prozess mit einer GUI kann durchaus ein Client auf einem Remote-X-Server sein.
Ich denke du kommst mit
xlsclients
oder näherxlsclients -a
. Mit der-l
Option erhalten Sie (unter anderem) auch die Fenster-ID. Aber es kann Ihnen nicht die PID geben. X weiß es im Allgemeinen nicht.Nachdenken: Mit Root-Zugriff können Sie die
lsof
Ausgabe durchsuchen, um festzustellen, welche (lokalen!) Prozesse auf die (lokalen!) X-Server zugreifen. Vielleicht gibt es da draußen schon ein Tool, das das macht? Ich weiß es nicht.quelle
lsof
kann Unix- oder abstrakte Domain-Sockets auflisten, aber nicht sagen, mit was sie verbunden sind.perl
Skript können Sie unter Linuxsudo lsof -aUc Xorg | sudo that-script
die lokalen Clients mithilfe der Unix- / Abstract-Sockets auflisten.sudo lsof -ai tcp -c Xorg
um die Clients mit TCP-Sockets aufzulisten.