Linux'ta, bir işlemin bir dosyada ne kadar olduğunu nasıl görebilirim?


13

Benim gibi bir komutum varsa

   cat myfile | processor_application

İşlemci_uygulaması, parçalarda, işlemek için standarttan okunan bir şeydir, dosya kedisi boyunca ne kadar ilerlediğini görmek mümkün müdür?

Muhtemelen lsof mu kullanıyorsunuz?

Teşekkürler!


Şimdiye kadar cevaplar için teşekkür ederim! Ancak, daha net olmalıydım: komut zaten çalışıyor.
wodow

Ah evet, o zaman pv o kadar kullanışlı değil. Bunu daha açık hale getirmek için orijinal sorunuzu düzenlemek isteyebilirsiniz.
Phil Hollenback

Aslında, şimdi bu soruda üç büyük ayrı cevap var, bu yüzden olduğu gibi bırakacağım.
wodow

1
Özetlemek gerekirse: 1. pv kullanın (başlamadan önce) 2. lsof -o kullanın (ofsetler destekleniyorsa) 3. kedinin bilinen PID'si için / proc / <PID> / io üzerindeki wchar değerine bakın süreci
wodow

Yanıtlar:


13

Bunu yapmak için pv kullanabilirsiniz örn.

pv file | processor_application

Pv geçerken, stdout'a doğrudan stdin geçer, kedi kullanmanıza gerek yoktur.

Düzenle Programınız çalışırken, catişlemin PID'sini bulun ve ardından içeriğine bakın.

/proc/<PID>/io

size kaç bayt yazdığını söyleyecektir - wchar.


Sadece düzenlemeni gördüm! Bu, (i) zincirde pv, (ii) lsof -o çalışmadığı sürece mükemmel çalışır. Teşekkürler!
wodow

9

Kesinlikle! Boru Görüntüleyicisi tam olarak bunu yapar. Sadece boru hattınıza yerleştirin:

cat myfile | pv | processor_application

catYukarıdaki örnekte optimize edebilirsiniz :

pv myfile | processor_application

Bu, gerçek bir ilerleme göstergesi sağlama avantajına sahiptir, çünkü pv doğrudan girişin boyutunu belirleyebilir. Bir boru hattının ortasında pv kullanırsanız, doğru ilerleme elde etmek için dosya boyutunu kendiniz sağlamanız gerekir:

input_process | pv -s 100M -p | processor_application

Pv'yi özelleştirmek için daha fazla seçenek için web sitesine bakın.


pvKullanılabilir olduğunda seviyorum :-)
voretaq7

Ve (gdb'leri olan dört sistem çağrısı) pvkullanarak bir boru hattına eklemek oldukça kolaydır . mkfifogdbp
user1686

@ yerçekimi böyle alay edemezsin. Gerçek bir cevap yaz ve göster - Şimdi çok merak ediyorum.
Phil Hollenback

2
Cevap olmak için çok fazla hack, ama burada.
user1686

6

İşlem zaten çalışıyorsa size/offset, size yardımcı olabilecek bir sütun varsa - incelemek istediğiniz kedi işleminin PID'sini bulun ve ardından lsof -o -p [PID].

İşlem henüz çalışmıyorsa, pvdiğerlerinin önerdiği gibi iyi bir seçenektir (sisteminizin bu yardımcı programa sahip olduğu varsayılarak).


Baktığım lsof seçeneği bu. Ancak: lsof -o öğesine izin verilmiyorsa veya sistemde kullanılamıyorsa ne olur?
wodow

Eğer -osisteminizde değil işliyor ben hemen hemen kullanarak açısından vidalı konum düşünüyorum lsof: - / (Sana başlattı kullanıcı olarak lsof koşuyoruz varsayalım catişlem veya root olarak?)
voretaq7

Evet, ikisini de denedim. Ben şu anda mevcut değil -o uyardı nedenleri
arıyorum

Gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ adresine yansıtılan lsof SSS, 3.43.2.3 numaralı maddede lsof -o'nun Linux'ta mümkün olmadığını ima ediyor! Diğer kullanıcılar lsof -o kullanıyor gibi görünüyor, bu aşırı geniş olduğunu varsayalım
wodow
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.