Nếu tôi có một lệnh đường ống như
cat myfile | processor_application
trong đó bộ xử lý_application là một cái gì đó đọc từ tiêu chuẩn, trong các đoạn, để xử lý, liệu có thể thấy con mèo đã đi được bao xa?
Có thể sử dụng lsof?
Cảm ơn!
Nếu tôi có một lệnh đường ống như
cat myfile | processor_application
trong đó bộ xử lý_application là một cái gì đó đọc từ tiêu chuẩn, trong các đoạn, để xử lý, liệu có thể thấy con mèo đã đi được bao xa?
Có thể sử dụng lsof?
Cảm ơn!
Câu trả lời:
Bạn có thể sử dụng pv để làm điều này, vd
pv file | processor_application
Khi pv chuyển stdin trực tiếp đến thiết bị xuất chuẩn, bạn không cần sử dụng mèo.
Chỉnh sửa
Vì chương trình của bạn đang chạy, sau đó tìm PID của cat
quá trình và sau đó xem nội dung của
/proc/<PID>/io
Nó sẽ cho bạn biết nó đã viết bao nhiêu byte - wchar.
Chắc chắn rồi! Ống xem không chính xác mà. Chỉ cần chèn nó vào đường ống của bạn:
cat myfile | pv | processor_application
Bạn có thể tối ưu hóa đi cat
trong ví dụ trên:
pv myfile | processor_application
Có lợi thế là cung cấp một chỉ báo tiến độ thực tế, vì pv có thể xác định kích thước của đầu vào trực tiếp. Nếu bạn sử dụng pv ở giữa một đường ống, bạn cần tự cung cấp kích thước tệp để có được tiến trình chính xác:
input_process | pv -s 100M -p | processor_application
Kiểm tra trang web để có thêm tùy chọn để tùy chỉnh pv.
pv
khi nó khả dụng :-)
pv
vào một đường ống bằng cách sử dụng mkfifo
và gdb
(bốn tòa nhà với gdb p
).
Nếu quy trình đang chạy, lsof có một size/offset
cột có thể hữu ích cho bạn - hãy tìm PID của quy trình mèo mà bạn muốn kiểm tra và sau đó lsof -o -p [PID]
.
Nếu quy trình chưa chạy, pv
vì những người khác đề xuất là một lựa chọn tốt (giả sử hệ thống của bạn có tiện ích đó).
-o
không hoạt động trên hệ thống của bạn, tôi nghĩ rằng bạn khá khó khăn khi sử dụng lsof
: - / (Tôi giả sử bạn đang chạy lsof với tư cách là người dùng đã khởi chạy cat
quy trình hoặc là root?)