Da ich die Antwort von Jauco nicht bearbeiten darf, gebe ich die vollständige Antwort, die für mich funktioniert hat (Russells Seite stützt sich auf ein nicht garantiertes Verhalten, das, wenn Sie den Dateideskriptor 1 für STDOUT schließen, der nächste creat
Aufruf öffnet FD 1.
Führen Sie also ein einfaches Endlosskript wie dieses aus:
import time
while True:
print 'test'
time.sleep(1)
Speichern Sie es in test.py, führen Sie es mit
aus$ python test.py
Holen Sie sich die PID:
$ ps auxw | grep test.py
Hängen Sie nun gdb
an :
$ gdb -p (pid)
und führe fd
aus Magie:
(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1
Jetzt können Sie tail /tmp/stdout
und sehen Sie sich die Ausgabe an, die früher zu STDOUT ging.
Es gibt mehrere neue Dienstprogramme, die die "gdb-Methode" zusammenfassen und einige zusätzliche Details hinzufügen. Die, die ich jetzt verwende, heißt "reptyr" ("Re-PTY-er"). Zusätzlich zum Greifen von STDERR/STDOUT wird es tatsächlich das steuernde Terminal eines Prozesses ändern (selbst wenn es vorher nicht an ein Terminal angeschlossen war).
Die beste Verwendung davon ist, eine Bildschirmsitzung zu starten und sie zu verwenden, um einen laufenden Prozess innerhalb von Bildschirm wieder mit dem Terminal zu verbinden, damit Sie sich sicher davon trennen und später zurückkehren können.
Es ist in beliebten Distributionen enthalten (Beispiel:'apt-get install reptyr').
http://onethingwell.org/post/2924103615/reptyr