lsof -p PID vs lsof | grep PID


12

Ben lsof komutunun çıkışını anlamıyorum.

Yazdığımda

lsof -p PID

4 satır alıyorum ve yazarken

lsof | grep PID

Yüzlerce satır alıyorum.

Aynı sonucu vermemeli mi?

Yanıtlarınız için teşekkür ederim. İşte çıktı. Görünüşe göre alt süreç mi, yoksa bu görevlerin anlamı nedir?

lsof -p 29076
COMMAND   PID  USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
java    29076  pr    cwd   unknown                      /proc/29076/cwd (readlink: Permission denied)
java    29076  pr    rtd   unknown                      /proc/29076/root (readlink: Permission denied)
java    29076  pr    txt   unknown                      /proc/29076/exe (readlink: Permission denied)
java    29076  pr   NOFD                                /proc/29076/fd (opendir: Permission denied)

lsof |grep 29076|head -20
java      29076        pr  cwd   unknown                          /proc/29076/cwd (readlink: Permission denied)
java      29076        pr  rtd   unknown                          /proc/29076/root (readlink: Permission denied)
java      29076        pr  txt   unknown                          /proc/29076/exe (readlink: Permission denied)
java      29076        pr NOFD                                    /proc/29076/fd (opendir: Permission denied)
java      29076   300  pr  cwd   unknown                          /proc/29076/task/300/cwd (readlink: Permission denied)
java      29076   300  pr  rtd   unknown                          /proc/29076/task/300/root (readlink: Permission denied)
java      29076   300  pr  txt   unknown                          /proc/29076/task/300/exe (readlink: Permission denied)
java      29076   300  pr NOFD                                    /proc/29076/task/300/fd (opendir: Permission denied)
java      29076   329  pr  cwd   unknown                          /proc/29076/task/329/cwd (readlink: Permission denied)
java      29076   329  pr  rtd   unknown                          /proc/29076/task/329/root (readlink: Permission denied)
java      29076   329  pr  txt   unknown                          /proc/29076/task/329/exe (readlink: Permission denied)
java      29076   329  pr NOFD                                    /proc/29076/task/329/fd (opendir: Permission denied)
java      29076   330  pr  cwd   unknown                          /proc/29076/task/330/cwd (readlink: Permission denied)
java      29076   330  pr  rtd   unknown                          /proc/29076/task/330/root (readlink: Permission denied)
java      29076   330  pr  txt   unknown                          /proc/29076/task/330/exe (readlink: Permission denied)
java      29076   330  pr NOFD                                    /proc/29076/task/330/fd (opendir: Permission denied)
java      29076   331  pr  cwd   unknown                          /proc/29076/task/331/cwd (readlink: Permission denied)
java      29076   331  pr  rtd   unknown                          /proc/29076/task/331/root (readlink: Permission denied)
java      29076   331  pr  txt   unknown                          /proc/29076/task/331/exe (readlink: Permission denied)
java      29076   331  pr NOFD                                    /proc/29076/task/331/fd (opendir: Permission denied)

Yanıtlar:


7

Gerçek çıktıyı görmeden tam olarak ne olduğunu söylemek zor ama lsof -p PIDkomutun sadece lsof | grep PID'PID' olan herhangi bir satırı yazdırırken belirtilen PID tarafından açılan dosyaları yazdırmasından kaynaklandığını tahmin ediyorum. hattın herhangi bir yerinde bulunur. Örneğin, PID = 123 için arama yapıyorsanız, grepseçenekleriniz PID'nin 1231, 1232, 1233 vb.Için satırları ve tam yolunda 123 olan klasörlerde bulunan dosyaları da yazdıracaktır.

DÜZENLEME: Özel örneğinizdeki fark, lsofbir iş parçacığı tarafından açılan dosyaları yok saymasıdır. grepÖrnekteki çıktıya bakarsanız , üçüncü sütun 'TID' veya Thread ID'dir. TID'siz satırlar -pseçeneği kullandığınızda gördüklerinizle eşleşir . Bir TID'ye sahip olan çizgiler (diğer iplikler tarafından açılan çizgiler) ekstralardır.


Aslında, TID kılavuz sayfalarında mutlaka bir Konu Kimliği değil, "Görev Tanımlama numarası" olarak anılır.
Miljen Mikic

2

lsof - açık dosyaları listeler, lsof için man sayfasını okumaya çalışın #man lsof

lsof -p PID PID işlem kimliğiyle ilişkili açık dosyaları listeler.

Herhangi bir seçeneğin yokluğunda, lsof tüm etkin işlemlere ait tüm açık dosyaları listeler. bunu yaptığınızda lsof | grep PID, tüm etkin işlemlere ait tüm açık dosyaları listeler ve PID'nin kendisiyle ve her yerde eşleşebilen PID numarasını grep eder, burada PID diğer PID'lerin bir parçası olarak görünür ve PID'nin alt süreci olabilir ve yakında.

Bu nedenle, kullanmak lsof | grep PIDistiyorsanız, tam kelime eşleşmesi gibi PID ile tam olarak eşleşmelisiniz lsof | grep -w PID, ancak PID'nin başka alt süreçleri varsa yine de daha fazla satırla sonuçlanacaktır.


0

Bunu sistemimde denedim ve her iki komut da aynı listeleri oluşturuyor, sadece işlem durumunun kararlı olduğundan emin olmak için her iki komutu da art arda birkaç kez denemenizi öneririz. Man sayfasına ve çıktılarınıza göre, bu sahip olabileceğim tek açıklama bu.


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.