Como no tengo permitido editar la respuesta de Jauco, daré la respuesta completa que funcionó para mí (la página de Russell se basa en un comportamiento no garantizado de que, si cierra el descriptor de archivo 1 para STDOUT, el siguiente creat
la llamada abrirá FD 1.
Por lo tanto, ejecute un script sin fin simple como este:
import time
while True:
print 'test'
time.sleep(1)
Guárdelo en test.py, ejecútelo con
$ python test.py
Obtener el PID:
$ ps auxw | grep test.py
Ahora, adjunte gdb
:
$ gdb -p (pid)
y haz el fd
magia:
(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1
Ahora puedes tail /tmp/stdout
y ver la salida que solía ir a STDOUT.
Hay varias utilidades nuevas que completan el "método gdb" y agregan algunos toques adicionales. El que uso ahora se llama "reptyr" ("Re-PTY-er"). Además de tomar STDERR/STDOUT, en realidad cambiará el terminal de control de un proceso (incluso si no estaba previamente conectado a un terminal).
El mejor uso de esto es iniciar una sesión de pantalla y usarla para volver a adjuntar un proceso en ejecución al terminal dentro de la pantalla para que pueda desconectarse de él de manera segura y volver más tarde.
Está empaquetado en distribuciones populares (Ej:'apt-get install reptyr').
http://onethingwell.org/post/2924103615/reptyr