determinar o ID da área de trabalho ou janela de uma determinada janela do emulador de terminal a partir de um PID

1

Eu quero saber em qual área de trabalho um determinado processo está sendo executado. Posso obter isso da ID da janela usando wmctrl . Também posso descobrir em qual terminal emulador processa um determinado processo que está sendo executado rastreando a linhagem parental até um processo terminal.

No entanto, um determinado processo de terminal terá várias janelas espalhadas por vários desktops.

Eu uso o emulador de terminal roxterm atualmente, embora o Konsole e o gnome-terminal sejam semelhantes a ele nesse aspecto.

Existe uma maneira de consultar um ou mais desses aplicativos para descobrir em qual das janelas um determinado processo está sendo executado? Se isso requer gdb hackery, bem, hackear. Embora seja provável que algo continue a funcionar após uma atualização, provavelmente seria melhor:)

Eu não me oponho totalmente a rastrear essas coisas na inicialização do bash, mas eu detesto classificar todos os detalhes, e parece provável que existam alguns casos significativos que não funcionem com essa abordagem. . Embora talvez alguém já tenha percebido isso?

Alternativamente, se houver outro emulador de terminal que forneça uma interface mais rica para acessar esses dados introspectivos, seria bom saber.

Eu poderia contornar isso executando cada janela em um processo separado, mas os compromissos em termos de uso de memória e versatilidade (por exemplo, mover uma guia de uma janela para outra) são provavelmente inaceitáveis. Principalmente é o uso da memória.

    
por intuited 08.08.2010 / 18:58

1 resposta

2

Muitos emuladores de terminal (incluindo rxvt, xterm, gnome-terminal e konsole; não testei com o roxterm) definem a variável de ambiente WINDOWID para o id da janela em que o subprocesso (por exemplo, o shell) foi iniciado. Então, no Linux,

</proc/$pid/environ tr \0 \n | sed -n 's/^WINDOWID=//p'

informa em qual janela $pid está sendo executada.

Isso não funcionará se o processo tiver migrado entre as janelas, por exemplo, se estiver sendo executado na tela ou se você tiver migrado as guias entre as janelas.

    
por 08.08.2010 / 19:33