Di Linux, bagaimana saya bisa melihat sejauh mana proses sebuah file?

12

Jika saya memiliki perintah pipa seperti

   cat myfile | processor_application

di mana processor_application adalah sesuatu yang membaca dari standar di, di chunks, untuk diproses, apakah mungkin untuk melihat seberapa jauh file yang didapat kucing?

Mungkin menggunakan lsof?

Terima kasih!

wodow
sumber
Terima kasih atas jawabannya sejauh ini! Namun, saya seharusnya lebih jelas: perintah sudah berjalan.
wodow
Ah ya, maka pv tidak begitu berguna. Anda mungkin ingin mengedit pertanyaan asli Anda agar lebih jelas.
Phil Hollenback
Sebenarnya, ada tiga jawaban terpisah yang luar biasa dalam pertanyaan ini sekarang, jadi saya akan membiarkannya apa adanya.
wodow
1
Ringkasnya, mereka adalah: 1. Gunakan pv (sebelum Anda mulai) 2. Gunakan lsof -o (jika offset didukung) 3. lihat nilai wchar di / proc / <PID> / io, untuk PID kucing yang dikenal proses
wodow

Jawaban:

12

Anda dapat menggunakan pv untuk melakukan ini, mis

pv file | processor_application

Saat pv melewatinya stdin langsung ke stdout Anda tidak perlu menggunakan kucing.

Sunting Karena program Anda sudah berjalan, cari PID dari catproses dan kemudian lihat isi

/proc/<PID>/io

yang akan memberi tahu Anda berapa banyak byte yang telah ditulis - wchar.

Iain
sumber
Saya baru saja melihat hasil edit Anda! Ini berfungsi sempurna mengingat tidak adanya (i) pv dalam rantai, (ii) lsof -o berfungsi. Terima kasih!
wodow
9

Benar! Pipe Viewer benar-benar melakukannya. Masukkan saja ke dalam pipeline Anda:

cat myfile | pv | processor_application

Anda dapat mengoptimalkan cat dalam contoh di atas:

pv myfile | processor_application

Yang memiliki keunggulan memberikan indikator kemajuan yang sebenarnya, karena pv dapat menentukan ukuran input secara langsung. Jika Anda menggunakan pv di tengah-tengah pipa, Anda harus menyediakan ukuran file sendiri untuk mendapatkan kemajuan yang akurat:

input_process | pv -s 100M -p | processor_application

Periksa situs web untuk opsi lebih lanjut untuk menyesuaikan pv.

Phil Hollenback
sumber
Saya suka pvketika tersedia :-)
voretaq7
Lebih mudah untuk memasukkan pvke dalam pipa dengan menggunakan mkfifodan gdb(empat syscall dengan gdb's p).
user1686
@grawity Anda tidak bisa menggoda seperti itu. Tulis jawaban nyata dan tunjukkan - Saya sangat ingin tahu sekarang.
Phil Hollenback
2
Terlalu banyak retasan untuk menjadi jawaban, tetapi di sini.
user1686
6

Jika proses sudah berjalan, lsof memiliki size/offsetkolom yang mungkin dapat membantu Anda - cari PID proses kucing yang ingin Anda periksa lalu lsof -o -p [PID].

Jika prosesnya belum berjalan, pvseperti yang disarankan orang lain adalah pilihan yang baik (dengan asumsi sistem Anda memiliki utilitas itu).

voretaq7
sumber
Ini adalah opsi lsof yang saya lihat. Tetapi: bagaimana jika lsof -o tidak diizinkan atau tidak tersedia pada sistem?
wodow
Jika -otidak bekerja pada sistem Anda, saya pikir Anda cukup kacau sehubungan dengan menggunakan lsof: - / (Saya menganggap Anda menjalankan lsof sebagai pengguna yang meluncurkan catproses, atau sebagai root?)
voretaq7
Ya, coba keduanya. Saya mencari alasan mengapa peringatan -ya tidak tersedia sekarang ...
wodow
FAQ lsof, dicerminkan di gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ , menyiratkan pada poin / pertanyaan 3.43.2.3 bahwa lsof -o tidak dimungkinkan di Linux! Saya menganggap ini terlalu luas, karena pengguna lain tampaknya menggunakan lsof -o
wodow