
Gostaria de descobrir qual das minhas ~ 50 janelas de tela GNU tem um processo em execução com uma variável específica definida nele. Por exemplo, há cerca de uma semana, fiz o seguinte:
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 um é? Alguma sugestão?
Responder1
Se este for Linux, você poderia seguir um processo mais ou menos assim. Como exemplo de um "processo de longa execuçã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 seu ambiente, no qual screen
define uma WINDOW
variável:
$ tr '\0' '\n' < /proc/22013/environ | grep WINDOW
WINDOW=3
Qual é correto. Eu executei na tela Janela 3. Como esta é uma variável de ambiente, há uma boa chance de que sua tarefa também a herde (dependendo de qual tipo de exec()
chamada é usada), então você provavelmente também poderá espionar o ambiente de sua tarefa, e encontre o mesmo resultado.