
Me gustaría saber cuál de mis ventanas de pantalla de ~50 gnu tiene un proceso ejecutándose con una variable específica definida en él. Por ejemplo, hace aproximadamente una semana hice esto:
id=ABC123456; ~/run_long_process $id
Esto se está ejecutando en una de mis ventanas de pantalla de ~50 gnu y está produciendo una gran cantidad de STDOUT/STDERR pero, además de desplazarse hacia atrás en cada una de las ventanas o Ctrl+Z y reanudar cada una de las ventanas, ¿hay alguna manera de averiguar cuál? uno es? ¿Alguna sugerencia?
Respuesta1
Si se trata de Linux, podría seguir un proceso como este. Como ejemplo de un "proceso de larga duración", voy a utilizar "perl -e sleep", que simplemente duerme para siempre:
$ id=ABC123456; perl -e sleep $id
Ahora, necesitamos encontrar el proceso en ejecución:
$ ps -Af | grep [A]BC123456
user 30579 22013 0 09:32 pts/10 00:00:00 perl -e sleep ABC123456
# ^^^^^ parent PID
Ahora que tenemos el PID del padre, podemos husmear en su entorno, en el que screen
establece una WINDOW
variable:
$ tr '\0' '\n' < /proc/22013/environ | grep WINDOW
WINDOW=3
Cual es correcta. Lo ejecuté en la ventana de pantalla 3. Dado que se trata de una variable de entorno, existe una buena posibilidad de que su tarea también la herede (dependiendo del tipo de exec()
llamadas que se utilicen), por lo que probablemente también pueda espiar el entorno de su tarea. y encontrar el mismo resultado.