Creo que tengo una solución más simple aquí. Simplemente busque un directorio cuyo nombre corresponda al PID que está buscando, bajo el pseudo-sistema de archivos accesible bajo el /proc
sendero. Entonces, si tiene un programa en ejecución, cuyo ID es 1199, cd
en él:
$ cd /proc/1199
Luego busca el fd
directorio debajo
$ cd fd
Este fd
El directorio contiene los objetos de descriptores de archivo que usa su programa (0:stdin, 1:stdout, 2:stderr) y solo tail -f
el que necesita, en este caso, stdout):
$ tail -f 1
Estaba buscando exactamente lo mismo y descubrí que puedes hacer:
strace -ewrite -p $PID
No es exactamente lo que necesitabas, pero está bastante cerca.
Probé la salida de redirección, pero no funcionó para mí. Tal vez porque el proceso estaba escribiendo en un socket, no lo sé.
Para mí, esto funcionó:
-
Inicie sesión como propietario del proceso (incluso
root
se le niega el permiso)~$ su - process_owner
-
Siga el descriptor de archivo como se menciona en muchas otras respuestas.
~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
Hay algunas opciones aquí. Una es redirigir la salida del comando a un archivo y luego usar 'tail' para ver las nuevas líneas que se agregan a ese archivo en tiempo real.
Otra opción es iniciar su programa dentro de la 'pantalla', que es una especie de aplicación de Terminal basada en texto. Las sesiones de pantalla se pueden adjuntar y desconectar, pero nominalmente solo deben ser utilizadas por el mismo usuario, por lo que si desea compartirlas entre usuarios, es un gran dolor de cabeza.