Comme je ne suis pas autorisé à modifier la réponse de Jauco, je vais donner la réponse complète qui a fonctionné pour moi (la page de Russell repose sur un comportement non garanti qui, si vous fermez le descripteur de fichier 1 pour STDOUT, le prochain creat
l'appel ouvrira FD 1.
Exécutez donc un simple script sans fin comme celui-ci :
import time
while True:
print 'test'
time.sleep(1)
Enregistrez-le dans test.py, exécutez avec
$ python test.py
Obtenir le PID :
$ ps auxw | grep test.py
Maintenant, joignez gdb
:
$ gdb -p (pid)
et faites le fd
magie :
(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1
Vous pouvez maintenant tail /tmp/stdout
et voir la sortie qui allait à STDOUT.
Il existe plusieurs nouveaux utilitaires qui complètent la "méthode gdb" et ajoutent quelques touches supplémentaires. Celui que j'utilise maintenant s'appelle "reptyr" ("Re-PTY-er"). En plus de saisir STDERR/STDOUT, cela changera en fait le terminal de contrôle d'un processus (même s'il n'était pas auparavant attaché à un terminal).
La meilleure utilisation consiste à démarrer une session screen et à l'utiliser pour rattacher un processus en cours d'exécution au terminal dans screen afin que vous puissiez vous en détacher en toute sécurité et revenir plus tard.
Il est empaqueté sur des distributions populaires (Ex :'apt-get install reptyr').
http://onethingwell.org/post/2924103615/reptyr