Trên Linux, làm thế nào tôi có thể thấy một quá trình tập tin là bao xa?


12

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ảm ơn bạn cho câu trả lời cho đến nay! Tuy nhiên, tôi nên rõ ràng hơn: lệnh đã chạy.
wodow

À đúng rồi, pv không tiện dụng như vậy. Bạn có thể muốn chỉnh sửa câu hỏi ban đầu của mình để làm cho nó rõ ràng hơn.
Phil Hollenback

Trên thực tế, có ba câu trả lời riêng biệt tuyệt vời trong câu hỏi này bây giờ, vì vậy tôi sẽ để nó như vậy.
wodow

1
Tóm tắt, chúng là: 1. Sử dụng pv (trước khi bạn bắt đầu) 2. Sử dụng lsof -o (nếu offset được hỗ trợ) 3. xem giá trị của wchar trên / Proc / <PID> / io, đối với PID đã biết của mèo quá trình
wodow

Câu trả lời:


12

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 catquá 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.


Tôi chỉ thấy chỉnh sửa của bạn! Điều này hoạt động hoàn hảo khi không có (i) pv trong chuỗi, (ii) lsof -o làm việc. Cảm ơn!
wodow

9

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 cattrong 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.


Tôi thích pvkhi nó khả dụng :-)
voretaq7

Nó khá dễ dàng để chèn pvvào một đường ống bằng cách sử dụng mkfifogdb(bốn tòa nhà với gdb p).
dùng1686

@grawity bạn không thể trêu chọc như thế. Viết một câu trả lời thực sự và chứng minh - Bây giờ tôi rất tò mò.
Phil Hollenback

2
Quá nhiều hack là một câu trả lời, nhưng ở đây.
dùng1686

6

Nếu quy trình đang chạy, lsof có một size/offsetcộ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, pvvì 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 đó).


Đây là tùy chọn lsof mà tôi đã xem xét. Nhưng: nếu lsof -o không được phép hoặc không có sẵn trên hệ thống thì sao?
wodow

Nếu -okhô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 catquy trình hoặc là root?)
voretaq7

Vâng, đã thử cả hai. Tôi đang tìm kiếm lý do lsof cảnh báo -o như hiện không có sẵn ...
wodow

Câu hỏi thường gặp về lsof, được nhân đôi tại gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ , ngụ ý ở điểm / câu hỏi 3.43.2.3 mà lsof -o không thể có trên Linux! Tôi cho rằng điều này là quá rộng, vì những người dùng khác dường như đang sử dụng lsof -o
wodow
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.