여기서 질문을 프로세스를 그래픽으로 나열하는 방법과 혼동하지 마십시오. 그것은 제가 묻는 것이 아닙니다.
터미널에서 어떤 프로세스에 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
그 중 하나만 정의된 "아이콘 이름"을 볼 수 있지만 이는 단지 힌트일 뿐입니다. 또한 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는 이를 모릅니다.
생각: 루트 액세스를 사용하면 lsof
출력을 grep하여 어떤 (로컬!) 프로세스가 (로컬!) X 서버에 액세스하는지 확인할 수 있습니다. 그렇다면 이를 수행할 수 있는 도구가 이미 존재할까요? 나는 모른다.