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.
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
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.
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
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.
Tags bash process ps shell shell-script