2013-08-30 26 views
12

Tôi đã thử nghiệm lệnh sau, nhưng nó không hoạt động.Tại sao 'đầu trang | grep> tệp 'không hoạt động?

$> top -b -d 1 | grep java > top.log 

Nó không sử dụng lỗi chuẩn. Tôi đã kiểm tra rằng nó sử dụng đầu ra tiêu chuẩn, nhưng top.log luôn trống. Tại sao điều này?

+0

Tôi không hoàn toàn chắc chắn, nhưng tôi nghĩ đầu là "tương tác" và không có luồng đầu ra tiêu chuẩn điển hình. Vì vậy, grep không nhận được đầu vào có lẽ. – squiguy

+0

Java thực sự đang chạy và có đủ tài nguyên để hiển thị? – user2357112

+0

Đánh giá theo [trang người đàn ông] (http://www.unixtop.org/man.shtml), các tùy chọn bạn đang chuyển đến 'top' có vẻ dư thừa. – user2357112

Trả lời

23

Theo mặc định, grep đầu ra bộ đệm ngụ ý rằng không có gì được ghi lên top.log cho đến khi đầu ra grep vượt quá kích thước bộ đệm (có thể khác nhau giữa các hệ thống).

Giới thiệu grep để sử dụng tính năng lưu vào bộ đệm dòng trên đầu ra. Hãy thử:

top -b -d 1 | grep --line-buffered java > top.log 
+0

Tuyệt vời! Nó hoạt động tốt. Cảm ơn bạn rất nhiều. – JaycePark

+0

Không nên 'grep' tuôn ra đầu ra của nó khi thoát' top'? Với '-d 1', có vẻ như điều đó sẽ xảy ra ngay lập tức. – user2357112

+0

@ user2357112 Chỉ khi nó thoát ra! – devnull

2

Trong máy nhúng của tôi, grep không có tùy chọn - được đệm theo dòng. Vì vậy, tôi sử dụng workaround này cho bản thân mình tôi:

while :;do top -b -n 1 | grep java >> top.log;done & 

Bằng cách này, tôi có thể có một màn hình đang chạy trong nền cho một chương trình như "java" và giữ tất cả các kết quả trong file top.log.

Các vấn đề liên quan