端末のグラフィックプロセスの一覧表示

端末のグラフィックプロセスの一覧表示

ここで質問をプロセスをグラフィカルにリストする方法と混同しないでください。それは私が尋ねるものではありません。

端末でどのプロセスにGUIがあるかどうかを確認できますか? Firefox、vlc、geany、nautilusなどと同様に、すべてのGUIがあります。どのプロセスがウィンドウマネージャのリソースを使用しているかを詳細に知りたいと思い、それを端末で実行したいと思います。

このタイプのプロセスに関する追加情報を取得するにはどうすればよいですか?

私はそのpsコマンドを使用しようとしましたが、それを理解するのに役立つすべてのターミナルコマンドを受け入れます。

更新:私が好きなものを見ました。pstree 私が作成したいすべてのグラフプロセスを持つツリーはどこにありますか?

$pstree
初期化─┬─
     ├─lightdm─┬─Xorg
     │ ├─lightdm─┬─init─┬─
     │ │ │ ├─firefox───55*[{firefox}]
     │ │ │ ├─geany─┬─bash
     │ │ │ │       
     │ │ │ ├─gnome-terminal─┬─bash───pstree


答え1

xrestopまたはを試してくださいxrestop -b

その目的は、各Xウィンドウが消費するXリソースの量を測定することですが、小さなボーナスでウィンドウ名とそのPIDを識別できます。

答え2

xlsclients密接に関連しており、Xの標準部分であり、Xサーバー上のクライアントを一覧表示します。しかし、、あなたが「アプリケーション」だと思うものとXが「クライアント」だと思うものとの間には1:1のマッピングがないかもしれません。たとえば、実行中の単一のLyXインスタンスは13個のクライアントを使用し(長い形式の出力)、xlsclients -lそのうちの1つだけが定義された「アイコン名」を見ることができますが、これはヒントです。また、XQueryTree()使用中にいくつかのウィンドウを見逃すことがあります(xpdf開いたウィンドウが見つかりません)。

また、多くの情報を提供していません。xlsclients -lを使用してウィンドウIDを取得し、を使用して各ウィンドウを照会できますxprop -id $ID。ウィンドウの詳細については、を使用してくださいxwinifo。ただし、クライアントやアプリケーションとは異なる「ウィンドウ」を考慮します。

xwininfo -root -children
xwininfo -root -tree  # indented view

ウィンドウマネージャに応じて、特定のウィンドウプロパティ(たとえば、_NET_xxxまたは_NET_WM_xxxx 特性)何かが「アプリケーション」であることを確認してください。ウィンドウマネージャクライアントまたはGUIライブラリがこれを設定する場合(現在設定する必要がある)、_NET_WM_PIDプロパティは最も簡単です(完璧ではありませんが、)PIDを特定のウィンドウに関連付ける方法です。私はこれらすべての部分を一つにまとめるツールを知りません。

私はウィンドウマネージャFVWMを使用してを使用して直接会話できます。FvwmCommandたとえば、FvwmCommand -i1 send_windowlistウィンドウのリストを表示します。 @Arkadiuszの使い方に関するアドバイスwmctrl同じことをする素晴らしいとウィンドウマネージャに拘束されない方法のようです。

別のトリックは、ルートウィンドウを照会することです。_WIN_CLIENT_LIST、渡すbash

$ xwininfo -root 
xwininfo: Window id: 0x69 (the root window) (has no name)
[..]

$ IFS=",= " read -a win < <(xprop -notype -id 0x69 32x  _WIN_CLIENT_LIST )

$ for ((ww=1; ww<${#win[*]}; ww++)); do 
    printf "%i %s\n" $ww ${win[$ww]};  
    xprop -id ${win[ww]} -notype _NET_WM_PID WM_NAME WM_CLASS \
                                 WM_ICON_NAME WM_CLIENT_LEADER; 
  done

これは私のWMにリストされているウィンドウとまったく同じです(WMウィンドウリストから除外するように設定したウィンドウを除く)。子ウィンドウはWM_CLIENT_LEADER親ウィンドウに設定されます(例:セッション管理)、親ウィンドウが見えなくなったり(firefoxがこれを行う)、自分を指すこともできます。

xrestopそれでも私の投票を受けました。

答え3

または使用している場合ヨーロッパWMH互換性のあるウィンドウマネージャをwmctrl試すことができます。すべてのwindows being managed by the window manager+対応するPIDを一覧表示できます。

$ wmctrl  -lp | awk  '{ print $3 }' | sort | uniq
15672
19685
19925
26247
6884

答え4

はい、Xが必要です。ただし、これをデフォルトで実行するツールはありません。

GUIを持つアプリケーションは、ローカルXサーバー上のクライアントです。ただし、ローカルXサーバーのクライアントは、必ずしもGUIを持つアプリケーションである必要はありません。さらに、ローカルXサーバー上のクライアントは必ずしもローカルプロセスである必要はありません。 GUIを持つローカルプロセスは、リモートXサーバー上のクライアントである可能性が高いです。

xlsclients私の考えはあなたに近いと思いますxlsclients -a。この-lオプションを使用すると、ウィンドウIDも提供されます。ただし、PIDを提供することはできません。一般に、Xはこれを知りません。

考え方:rootアクセスを使用すると、lsof出力をgrepして、どの(ローカル!)プロセスが(ローカル!)Xサーバーにアクセスしているかを確認できます。それでは、これを実行できるツールはすでに存在しますか?わかりません。

関連情報