Poiché non sono autorizzato a modificare la risposta di Jauco, fornirò la risposta completa che ha funzionato per me (la pagina di Russell si basa su un comportamento non garantito che, se chiudi il descrittore di file 1 per STDOUT, il successivo creat
la chiamata aprirà FD 1.
Quindi, esegui un semplice script infinito come questo:
import time
while True:
print 'test'
time.sleep(1)
Salvalo in test.py, eseguilo con
$ python test.py
Ottieni il PID:
$ ps auxw | grep test.py
Ora allega gdb
:
$ gdb -p (pid)
e fai il fd
magia:
(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1
Ora puoi tail /tmp/stdout
e guarda l'output che prima andava a STDOUT.
Sono disponibili diverse nuove utilità che completano il "metodo gdb" e aggiungono alcuni tocchi extra. Quello che uso ora si chiama "reptyr" ("Re-PTY-er"). Oltre ad acquisire STDERR/STDOUT, cambierà effettivamente il terminale di controllo di un processo (anche se non era precedentemente collegato a un terminale).
Il miglior utilizzo di questo è avviare una sessione dello schermo e utilizzarla per ricollegare un processo in esecuzione al terminale all'interno dello schermo in modo da potersi staccare in sicurezza da esso e tornare più tardi.
È impacchettato su distribuzioni popolari (Es:'apt-get install reptyr').
http://onethingwell.org/post/2924103615/reptyr