tela gnu: encontre qual janela da tela possui um determinado processo ou variável em execução?

4

Gostaria de descobrir qual das minhas ~ 50 janelas de tela gnu tem um processo em execução com uma variável específica definida nela. Por exemplo, cerca de uma semana atrás, eu fiz o seguinte:

id=ABC123456; ~/run_long_process $id

Isso está sendo executado em uma das minhas ~ 50 janelas de tela 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 um é? Alguma sugestão?

719016
fonte

Respostas:

8

Se esse for o Linux, você poderá seguir um processo semelhante a este. Como exemplo de um "processo de execução demorada", 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 screendefine uma WINDOWvariável:

$ tr '\0' '\n' < /proc/22013/environ | grep WINDOW
WINDOW=3

Qual é correto. Eu o executei na janela 3. Como essa é uma variável de ambiente, há uma boa chance de que sua tarefa também a herda (dependendo de qual tipo de exec()chamada é usada), para que você também possa bisbilhotar o ambiente de sua tarefa, e encontre o mesmo resultado.

Erro fatal
fonte
Observe que grep [A]BC123456está sendo usado com em [A]vez de, Apara que a expressão regular pesquisada não corresponda ao greppróprio processo. Observe também que o esinalizador para ps(por exemplo ps -Af e), no Linux, pelo menos, fará com que ele mostre o ambiente de cada processo, embora existam muitas variáveis, então você pode precisar usar, por exemplo, grep --color WINDOWpara que seja mais fácil encontrar a variável relevante.
doshea