Sự khác biệt giữa `lsof -p <pid> | wc -l` và `ls / Proc / <pid> / fd | wc -l`?


12

Bối cảnh: Tôi đang chơi xung quanh với việc theo dõi ulimit để chạy các quy trình cho một người dùng cụ thể. (Tôi thỉnh thoảng thấy các quy trình bắt đầu với một giới hạn không chính xác.) Tôi đã hỏi một vài chuyên gia về Linux tự xưng, và một người đề nghị lsof -p <pid>, trong khi những người khác đề nghị ls /proc/<pid>/fd, nhưng không tích cực về việc phản ánh chính xác hơn số lượng thực tế đối với mức tối đa mở tập tin giới hạn cho một quá trình.

Vì vậy, đó là gì?

lsof -p <pid> | wc -l

Hoặc là

ls /proc/<pid>/fd | wc -l

Xin hãy giải thích về sự khác biệt. Cảm ơn!


3
Âm thanh như bài tập về nhà.
ewwhite

1
Không phải bài tập về nhà. Thêm lời giải thích tốt hơn. Tôi đã đọc các lsoftrang hướng dẫn và trong khi tôi nghi ngờ câu trả lời là các tệp ánh xạ bộ nhớ, tôi muốn có xác nhận của một người có kinh nghiệm hơn.
Jared

Câu trả lời:


10

lsofcũng sẽ cung cấp cho bạn bộ nhớ .so-files - về mặt kỹ thuật không giống như một tệp xử lý mà ứng dụng có quyền kiểm soát. /proc/<pid>/fdlà điểm đo cho các bộ mô tả tệp mở - tuy nhiên: Được đề cập trong trang Proc-man - nếu luồng chính của chương trình đa luồng đã chấm dứt, thư mục này sẽ không khả dụng.

lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -lsẽ cho bạn thấy các mục tương tự như ls /proc/<pid>/fd | wc -l.

Các bản đồ bộ nhớ có sẵn trong /proc/<pid>/maps.


Các lsofcung cấp cho bạn hầu hết các đầu ra tương tự, nhưng nó cũng bao gồm cwd, rtdtxtmô tả tập tin.
Ian Bamforth

Cũng lưu ý rằng số lượng khoảng cách giữa COMMANDPIDcó thể khác nhau. Thay thế các không gian với [[:space:]]*để làm cho nó tổng quát hơn.
Ian Bamforth

Tôi cũng tìm thấy lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l ở đây , trong khi lsofAndroid shell ( adb shell) không hỗ trợ -a-d. Vì vậy, tôi sử dụng phiên bản của Kvisle cuối cùng.
Cuối tuần
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.