Karena saya tidak diizinkan untuk mengedit jawaban Jauco, saya akan memberikan jawaban lengkap yang berhasil untuk saya (halaman Russell bergantung pada perilaku yang tidak dijamin, jika Anda menutup deskriptor file 1 untuk STDOUT, 02 panggilan akan membuka FD 1.
Jadi, jalankan skrip tanpa akhir sederhana seperti ini:
import time
while True:
print 'test'
time.sleep(1)
Simpan ke test.py, jalankan dengan
$ python test.py
Dapatkan PID:
$ ps auxw | grep test.py
Sekarang, lampirkan 14
:
$ gdb -p (pid)
dan lakukan 20
sihir:
(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1
Sekarang Anda dapat 30
dan lihat keluaran yang digunakan untuk menuju ke STDOUT.
Ada beberapa utilitas baru yang menggabungkan "metode gdb" dan menambahkan beberapa sentuhan ekstra. Yang saya gunakan sekarang disebut "reptyr" ("Re-PTY-er"). Selain meraih STDERR/STDOUT, itu benar-benar akan mengubah terminal pengontrol dari suatu proses (meskipun sebelumnya tidak terpasang ke terminal).
Penggunaan terbaik dari ini adalah untuk memulai sesi layar, dan menggunakannya untuk memasang kembali proses yang sedang berjalan ke terminal di dalam layar sehingga Anda dapat melepaskannya dengan aman dan kembali lagi nanti.
Ini dikemas pada distro populer (Mis:'apt-get install reptyr').
http://onethingwell.org/post/2924103615/reptyr