lista de processos gráficos do terminal

7

Não confunda aqui a questão de como listar graficamente os processos, não é isso que estou perguntando.

No Terminal, como posso ver quais processos têm uma GUI? como em coisas como firefox, vlc, geany, nautilus etc ... todos têm um gui. Gostaria de obter mais informações sobre quais processos estão usando recursos do gerenciador de janelas e gostaria de fazer isso no terminal.

Como obtenho mais informações sobre esses tipos de processo?

Eu tenho tentado usar o comando ps , mas eu entretinha qualquer comando do terminal para me ajudar a resolver isso.

ATUALIZAÇÃO: Vejo algo de que gosto em pstree que é a árvore da qual todo o processo gráfico que me interessa é gerado:


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


    
por j0h 11.03.2015 / 15:41

4 respostas

5

Experimente xrestop ou xrestop -b .

Pretende-se medir quantos recursos X cada janela X consome, mas como um pequeno bônus identifica o nome das janelas e os PIDs correspondentes.

    
por 11.03.2015 / 15:47
6

xlsclients está próximo (e uma parte padrão de X), ele lista os clientes do servidor X. Mas , pode não haver um mapeamento 1: 1 entre o que você considera um "aplicativo" e o que o X considera um "cliente". Minha única instância em execução do LyX consome 13 clientes, por exemplo, se eu usar xlsclients -l (saída de formato longo), vejo apenas um deles tem um "Nome do ícone" definido, mas isso é apenas uma dica. Além disso, como ele usa XQueryTree() , ele pode perder algumas janelas (ele não encontra nenhuma xpdf windows que eu tenha aberto).

Ele também não fornece muita informação, mas o que você pode fazer é usar xlsclients -l para obter o ID da janela e consultar cada janela com xprop -id $ID . Para mais detalhes sobre uma janela, use xwinifo , embora se preocupe com "janelas" que não são a mesma coisa que clientes ou aplicativos:

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

Dependendo do seu gerenciador de janelas, você poderá inspecionar certas propriedades da janela (por exemplo, _NET_xxx ou _NET_WM_xxxx propriedades ) para determinar se algo é uma" aplicação ". Se o cliente do gerenciador de janelas ou a biblioteca da GUI o definir (qualquer contemporâneo deve), a propriedade _NET_WM_PID é a mais simples (

Eu uso o gerenciador de janelas FVWM, posso falar diretamente com ele usando FvwmCommand , por exemplo FvwmCommand -i1 send_windowlist mostra-me a lista de janelas. A sugestão do @Arkadiusz de usar o wmctrl parece ser uma boa maneira de gerenciar janelas e agnósticas coisa.

Mais um truque é consultar _WIN_CLIENT_LIST da janela raiz, via 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

Isso corresponde exatamente ao que meu WM lista como janelas (sem aquelas que eu configurei para serem excluídas da lista de janelas do WM). Janelas subordinadas configuram WM_CLIENT_LEADER para seu pai (para gerenciamento de sessão ), embora a janela pai possa não ser visível (o firefox faz isso) e pode apontar para si mesmo.

xrestop recebe meu voto.

    
por 11.03.2015 / 17:26
4

Como alternativa, se você estiver usando o gerenciador de janelas compatível com o EWMH , poderá fornecer wmctrl a try. Pode listar todos os windows being managed by the window manager + seus PIDs:

$ wmctrl  -lp | awk  '{ print $3 }' | sort | uniq
15672
19685
19925
26247
6884
    
por 11.03.2015 / 17:54
2

Sim, você precisa do X para isso. Mas eu não sei de uma ferramenta que faz isso fora da caixa.

Um aplicativo com uma GUI é um cliente no servidor X local. Mas, um cliente no servidor X local não é necessariamente um aplicativo com uma GUI. Além disso, um cliente no servidor X local não é necessariamente um processo local, e um processo local com uma GUI pode muito bem ser um cliente em um servidor X remoto.

Acho que você vai se aproximar com xlsclients ou xlsclients -a . Com a opção -l , ele também lhe dará (entre outras coisas) a ID da janela. Mas não pode te dar o PID. X, em geral, não sabe disso.

Ponderação: Com o acesso root, você pode passar por lsof output para ver quais processos (locais!) acessam o (s) servidor (es) X local. Então talvez haja alguma ferramenta lá fora já fazendo isso? Não sei.

    
por 11.03.2015 / 17:06