Tôi có 30 phiên bản của một quá trình đang chạy trên máy chủ và muốn ghi tệp đang mở cho từng quy trình để phân tích.lsof nên cung cấp cho tất cả các tệp đang mở cho một tập hợp các pids
Tôi chạy lệnh sau:
* ps auwwx | grep PROG_NAME | awk '{print $2}' | xargs lsof -p | less
Nó phàn nàn rằng, "lsof: lỗi tình trạng trên: Không có tập tin hoặc thư mục"
Tuy nhiên, nếu tôi chạy lsof -p <pid>
nó mang lại cho tôi sự danh sách các tệp đang mở cho quá trình đó. Làm thế nào tôi có thể nhận được một danh sách tất cả các tập tin mở cho tất cả 30 trường hợp của quá trình trên một máy FreeBSD.
Hơn nữa, tôi không muốn các thư viện được chia sẻ được liệt kê. Nếu tôi làm -d "^txt"
, nó không hiển thị một số tệp db khác mà tôi muốn được hiển thị. Có cách nào khác để grep ra các tập tin .so?
FYI cho người qua đường Internet: Tôi muốn giải quyết một vấn đề tương tự - đếm số lượng các tập tin đang mở cho mỗi quá trình, cụ thể là Java. Tôi đã làm nó như thế này: 'pgrep java | xargs -I {} bash -c 'printf {}; lsof -p {} | wc -l'' –