Chuyển hướng stdout sang một tệp khi tiến trình được chạy trong nền


4

Làm cách nào tôi có thể chuyển hướng thiết bị xuất chuẩn của chương trình sang tệp khi nó chạy trong nền?

Tôi có một chương trình tạo đầu ra mỗi giây. Khi tôi chạy bình thường và chuyển hướng đến một tệp, đầu ra nằm trong tệp đó như mong đợi:

#./program > file.txt
#cat file.txt
 output
 output
 output
#

Khi tôi cố gắng làm điều tương tự trong nền, tệp sẽ vẫn trống:

#./program > file.txt &
#cat file.txt
#

Không phải là cách tôi mong đợi nó được. Bạn đang chạy chương trình gì?
slhck

Bản thân chương trình không liên quan nhưng là một chương trình thực thi đơn giản, kiểm tra thứ gì đó mỗi giây và ghi giá trị hiện tại vào thiết bị xuất chuẩn.
Rauffle

1
Có phải nó cũng trống khi chương trình kết thúc?
Bernhard

1
Bạn có thể cho chúng tôi biết thêm chi tiết về chương trình thực tế bạn đang chạy không? Thông thường, chạy trong nền sẽ không có sự khác biệt.
chepner

1
Thế còn sh -c './program > file.txt; cat file.txt' &?
Xiè Jìléi

Câu trả lời:



2

Khi chuyển hướng thiết bị xuất chuẩn sang tệp văn bản, bạn đang thay đổi loại luồng từ bảng điều khiển sang tệp . Đầu ra giao diện điều khiển không có bộ đệm, trong khi đầu ra tập tin được đệm. Cho đến khi chương trình xóa thiết bị xuất chuẩn (tệp), văn bản sẽ tiếp tục đệm cho đến khi đạt đến ngưỡng đệm. Nếu văn bản "đầu ra \ n" được in cứ sau 2 giây và ngưỡng là 4.096 byte, sẽ mất gần 20 phút để xem bất kỳ đầu ra nào từ chương trình trong tệp.

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.