터미널의 그래픽 프로세스 나열

터미널의 그래픽 프로세스 나열

여기서 질문을 프로세스를 그래픽으로 나열하는 방법과 혼동하지 마십시오. 그것은 제가 묻는 것이 아닙니다.

터미널에서 어떤 프로세스에 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 서버에 액세스하는지 확인할 수 있습니다. 그렇다면 이를 수행할 수 있는 도구가 이미 존재할까요? 나는 모른다.

관련 정보