lsof -p PID so với lsof | grep PID


12

Tôi không hiểu thông số của lệnh lsof.

Khi tôi viết

lsof -p PID

Tôi nhận được 4 dòng và khi tôi viết

lsof | grep PID

Tôi nhận được hàng trăm dòng.

Nó không nên trả lại kết quả tương tự?

Cám ơn bạn đã phản hồi của bạn. Đây là đầu ra. Có vẻ như đó là quá trình phụ hoặc nhiệm vụ này có ý nghĩa gì?

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)

Câu trả lời:


7

Không nhìn thấy đầu ra thực tế, thật khó để nói chính xác những gì đang xảy ra nhưng tôi đoán nó gây ra bởi thực tế là lsof -p PIDlệnh chỉ in ra các tệp được mở bởi PID được chỉ định trong khi lsof | grep PIDin ra bất kỳ dòng nào có 'PID' nằm bất cứ nơi nào trong dòng. Ví dụ: nếu bạn đang tìm kiếm PID = 123 thì greptùy chọn của bạn cũng sẽ in các dòng cho 1231, 1232, 1233, v.v. của PID cũng như bất kỳ tệp nào nằm trong các thư mục có 123 ở bất kỳ đâu trong đường dẫn đầy đủ của chúng.

EDIT: Trong ví dụ cụ thể của bạn, sự khác biệt lsoflà bỏ qua các tệp được mở bởi một luồng. Nếu bạn nhìn vào đầu ra trong grepví dụ, cột thứ ba là 'TID' hoặc ID chủ đề. Các dòng không có TID khớp với những gì bạn đã thấy khi bạn sử dụng -ptùy chọn. Các dòng có TID (nghĩa là các dòng được mở bởi các luồng khác) là các phần bổ sung.


Trên thực tế, TID được gọi trong các trang man là "Số xác thực tác vụ", không nhất thiết phải là ID luồng.
Miljen Mikic

2

lsof - liệt kê các tệp đang mở, cố gắng đọc trang man cho lsof #man lsof

lsof -p PID liệt kê các tệp đang mở liên quan đến id quá trình của PID.

Trong trường hợp không có bất kỳ tùy chọn nào, lsof liệt kê tất cả các tệp đang mở thuộc về tất cả các quy trình đang hoạt động. khi bạn làm như vậy lsof | grep PID, nó liệt kê tất cả các tệp đang mở thuộc về tất cả các quy trình đang hoạt động và grep số PID, có thể khớp với chính PID và bất cứ nơi nào, nơi PID xuất hiện như một phần của các PID khác và cũng có thể là quá trình con của PID, và Sớm.

Do đó, nếu bạn muốn sử dụng lsof | grep PIDthì bạn nên kết hợp chính xác với PID, giống như kết hợp từ đầy đủ lsof | grep -w PID, nhưng nó vẫn sẽ dẫn đến nhiều dòng hơn nếu PID có các tiến trình con khác.


0

Tôi đã thử điều này trên hệ thống của mình và cả hai lệnh tạo cùng một danh sách, tôi khuyên bạn nên thử cả hai lệnh liên tiếp nhiều lần, để đảm bảo rằng trạng thái của quá trình ổn định. Theo trang man và kết quả đầu ra của bạn, đây là lời giải thích duy nhất tôi có thể có.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.