gnu screen: descobre que janela de tela tem um determinado processo ou variável em execução?

4

Eu gostaria de descobrir qual das minhas janelas de tela de ~ 50 gnu tem um processo em execução com uma variável específica definida nele. Por exemplo, há cerca de uma semana, fiz isso:

id=ABC123456; ~/run_long_process $id

Isso está sendo executado em uma das minhas janelas de tela ~ 50 gnu e está produzindo muito STDOUT / STDERR, mas, além de rolar para trás cada uma das janelas ou Ctrl + Z e retomar cada uma das janelas, existe uma maneira de Descobrir qual deles é? Alguma sugestão?

    
por 719016 07.02.2012 / 15:20

1 resposta

8

Se este é o Linux, você poderia seguir um processo como este. Como exemplo de um "processo de longa duração", usarei "perl -e sleep", que dorme para sempre:

$ id=ABC123456; perl -e sleep $id

Agora, precisamos encontrar o processo em execução:

$ ps -Af | grep [A]BC123456
user  30579 22013  0 09:32 pts/10   00:00:00 perl -e sleep ABC123456
#           ^^^^^ parent PID

Agora que temos o PID do pai, podemos bisbilhotar em seu ambiente, no qual screen define uma variável WINDOW :

$ tr '
$ id=ABC123456; perl -e sleep $id
' '\n' < /proc/22013/environ | grep WINDOW WINDOW=3

Qual é o correto. Eu executei na tela Window 3. Como esta é uma variável de ambiente, há uma boa chance de que sua tarefa também a herde (dependendo de qual sabor das chamadas exec() são usadas), então você provavelmente pode espionar o ambiente de sua tarefa também, e encontre o mesmo resultado.

    
por 07.02.2012 / 15:41