Apakah mungkin untuk membaca output dari proses apa pun menggunakan PID-nya?

32

Apakah mungkin untuk memasang terminal ke proses yang sudah berjalan dengan menggunakan PID-nya dengan cara yang mirip dengan menggunakan fgperintah untuk pekerjaan?

Tommy
sumber
seperti apa?! apa proses yang ingin Anda lampirkan ?!
Saya ingin dapat melihat output dari program yang dimulai di terminal lain
Tommy

Jawaban:

43

Anda bisa mendapatkan deskriptor file standar proses itu, misalnya stdout:

tail -f /proc/<pid>/fd/1
Jorge Castro
sumber
8
Saya mencoba solusi ini dengan top dan sepertinya tidak berhasil. Di terminal saya meluncurkan top dan di yang lain saya menggunakan perintah Anda dengan pid corred tetapi tidak mendapat hasil.
Tommy
1
Bagaimana Anda melakukan ini pada mac?
Avner Barr
bagaimana dengan stderr? Saya berasumsi / proc / <pid> / fd / 2, tapi lalu bagaimana Anda mendapatkan keduanya stdout / stderr?
Alexander Mills
1
Bagaimana jika deskriptor ini menunjuk ke soket? Tail tidak bisa membacanya. # ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Imaskar mengatakan Reinstate Monica
8

Ada beberapa opsi di sini. Salah satunya adalah mengarahkan output perintah ke file, dan kemudian gunakan tailuntuk melihat baris baru yang ditambahkan ke file itu secara real time.

Pilihan lain adalah meluncurkan program Anda di dalamnya screen, yang merupakan semacam aplikasi terminal berbasis teks. Sesi layar dapat dilampirkan dan dilepaskan, tetapi secara nominal dimaksudkan hanya untuk digunakan oleh pengguna yang sama, jadi jika Anda ingin membaginya di antara pengguna.

Jika Anda mau, Anda bisa melacak prosesnya dan melihat apa yang dilakukannya strace:

strace -e trace=open -p 22254 -s 80 -o output.txt
  • -p PID: Lampirkan ke proses dengan ID proses PID dan mulailah melacak.
  • -s SIZE: Tentukan ukuran string maksimum yang akan dicetak (standarnya adalah 32).
  • -o filename: Tuliskan output jejak ke nama file file daripada ke layar (stderr).
Olorin
sumber
Akhirnya sepertinya tidak berhasil. Saya meluncurkan top dan di yang lain saya menggunakan perintah Anda dengan pid corred tetapi tidak mendapatkan hasil yang diharapkan. Ketika saya menggunakan ekor setelah itu.
Tommy
Anda perlu menggunakan sudodengan strace untuk melampirkan ke suatu proses, dan menggunakannya -o ~/output.txtagar file tersebut tertinggal di folder rumah Anda.
Gunakan file output, jangan kirim ke layar! Jangan menjadi idiot seperti saya dan tekan Ctrl-C untuk keluar dari strace dan kemudian melepaskan PID saya. Membuatku takut pada naskah penting.
Weston Ganger
3

Anda dapat menggunakan perintah yang diberikan di bawah ini untuk melampirkan proses yang berjalan di terminal lain:

Contoh:

screen -S PID
retty $(pgrep PID)
reptyr PID
devav2
sumber
Saya tidak dapat menemukan retty atau reptry. Juga, untuk dapat menggunakan layar saya harus meluncurkan proses asli dengannya sehingga tidak menyelesaikan masalah saya.
Tommy
Anda dapat menginstalnya menggunakan perintah sudo apt-get install rettytetapi ada beberapa batasan dengan retty. Lihatlah halaman manual yang disebutkan dalam jawaban.
devav2