ここで質問をプロセスをグラフィカルにリストする方法と混同しないでください。それは私が尋ねるものではありません。
端末でどのプロセスに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サーバーにアクセスしているかを確認できます。それでは、これを実行できるツールはすでに存在しますか?わかりません。