GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Melihat Output Dari Proses yang Berjalan Di Sesi Bash Lain?

Saya telah membiarkan skrip berjalan di mesin jarak jauh sejak saya mengerjakannya secara lokal. Saya dapat terhubung melalui SSH ke mesin sebagai pengguna yang sama dan melihat skrip berjalan di ps .

$ ps aux | grep ipcheck
myuser  18386  0.0  0.0  18460  3476 pts/0    S+   Dec14   1:11 /bin/bash ./ipchecker.sh

Itu hanya mengeluarkan ke stdout pada sesi lokal (saya menjalankan ./ipchecker.sh membentuk jendela terminal lokal, tidak ada pengalihan, tidak menggunakan screen dll).

Apakah dari sesi SSH saya dapat melihat output dari perintah yang sedang berjalan ini (tanpa menghentikannya)?

Sejauh ini yang terbaik yang saya temukan adalah menggunakan strace -p 18386 tapi saya mendapatkan gerombolan teks terbang ke atas layar, itu terlalu detail. Saya bisa menghentikan strace dan kemudian menyaring output dan menemukan teks yang dicetak ke stdout tetapi sangat panjang dan membingungkan, dan jelas saat dihentikan saya mungkin melewatkan sesuatu. Saya ingin menemukan cara untuk melihat keluaran skrip secara langsung seolah-olah saya sedang bekerja secara lokal.

Adakah yang bisa memperbaiki ini? Jawaban yang jelas adalah memulai ulang skrip dengan pengalihan atau di screen session dll, ini bukan skrip misi kritis jadi saya bisa melakukannya. Namun, saya melihat ini sebagai latihan belajar yang menyenangkan.

Jawaban yang Diterima:

Jika Anda hanya ingin memata-matai proses yang ada, Anda dapat menggunakan strace -p1234 -s9999 -e write di mana 1234 adalah ID proses. (-s9999 menghindari string terpotong menjadi 32 karakter, dan write panggilan sistem yang menghasilkan keluaran.) Jika Anda hanya ingin melihat data yang ditulis pada deskriptor file tertentu, Anda dapat menggunakan sesuatu seperti strace -p1234 -e trace= -e write=3 untuk melihat hanya data yang ditulis ke deskriptor file 3 (-e trace= mencegah panggilan sistem dicatat). Itu tidak akan memberi Anda hasil yang sudah diproduksi.

Jika output bergulir terlalu cepat, Anda dapat menyalurkannya ke pager seperti less , atau kirimkan ke file dengan strace -o trace.log … .

Dengan banyak program, Anda dapat mengalihkan output berikutnya dengan peretasan ptrace, baik ke terminal Anda saat ini atau ke sesi layar baru. Lihat Bagaimana saya bisa menyangkal proses yang sedang berjalan dan mengaitkannya ke shell layar baru? dan utas terkait lainnya.

Perhatikan bahwa tergantung pada bagaimana sistem Anda diatur, Anda mungkin perlu menjalankan semua strace ini perintah sebagai root bahkan jika proses berjalan di bawah pengguna Anda tanpa hak ekstra. (Jika proses berjalan sebagai pengguna yang berbeda atau setuid atau setgid, Anda harus menjalankan strace sebagai root.) Sebagian besar distribusi hanya mengizinkan proses untuk melacak turunannya (ini memberikan manfaat keamanan moderat — ini mencegah beberapa injeksi malware langsung, tetapi tidak mencegah injeksi tidak langsung dengan memodifikasi file). Ini dikendalikan oleh kernel.yama.ptrace_scome sysctl.

Terkait:Cara Memenangkan Game Operasi Cloud dengan Otomatisasi Kubernetes dan Memotong Biaya dalam Proses
Linux
  1. Bagaimana Mengubah Pengalihan Output Dari Proses yang Berjalan?

  2. Linux – Bagaimana Mendapatkan Waktu Jam Dinding Dari Proses Yang Berjalan?

  3. Bagaimana Cara Mendapatkan Tty Di Bash Yang Sedang Berjalan?

  1. Bagaimana cara melihat proses yang berjalan dari setiap pengguna di SSH?

  2. Bisakah ID utas dari proses multithreaded sama dengan ID proses dari proses lain yang sedang berjalan?

  3. Bagaimana saya bisa menjaga proses tetap hidup setelah menutup sesi dempul?

  1. Apakah Mungkin Untuk Menelusuri Perintah Bawaan ke Bash?

  2. Bagaimana cara mendapatkan semua id proses yang sedang berjalan saja?

  3. Cara secara terprogram mengambil GID dari proses yang sedang berjalan