GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana proses mencegat stdout dan stderr dari proses lain di Linux?

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


Linux
  1. Cara Menemukan dan Membunuh Proses Zombie di Linux

  2. Cara Mengarahkan Output ke File dan Stdout di Linux

  3. Cara Mengatur Prioritas Proses Linux Menggunakan Perintah Nice dan renice

  1. Cara Menginstal dan Mengonfigurasi Monit di Linux untuk Pemantauan Proses

  2. Bagaimana saya bisa mencatat semua peluncuran proses di Linux?

  3. Bagaimana saya bisa mengidentifikasi proses mana yang membuat lalu lintas UDP di Linux?

  1. Cara Memulai Perintah Linux di Latar Belakang dan Melepaskan Proses di Terminal

  2. Cara Menyalin Izin dan Kepemilikan File ke File Lain di Linux

  3. Linux:Bagaimana cara mengetahui di mana suatu proses dimulai dan bagaimana proses itu dimulai?