Anggap Anda memiliki saluran pipa seperti berikut:
$ a | b
Jika bberhenti memproses stdin, setelah beberapa saat pipa terisi, dan menulis, dari ake stdout, akan memblokir (sampai bmulai memproses lagi atau mati).
Jika saya ingin menghindari ini, saya bisa tergoda untuk menggunakan pipa yang lebih besar (atau, lebih sederhana, buffer(1)) seperti:
$ a | buffer | b
Ini hanya akan memberi saya lebih banyak waktu, tetapi pada akhirnya aakan berhenti.
Apa yang ingin saya miliki (untuk skenario yang sangat spesifik yang saya bahas) adalah memiliki pipa "bocor" yang, ketika penuh, akan menjatuhkan beberapa data (idealnya, baris demi baris) dari buffer untuk amelanjutkan pemrosesan (seperti yang dapat Anda bayangkan, data yang mengalir di pipa dapat dibuang, yaitu memiliki data yang diproses bkurang penting daripada harus adapat berjalan tanpa memblokir).
Singkatnya, saya ingin memiliki sesuatu seperti buffer yang dibatasi dan bocor:
$ a | leakybuffer | b
Saya mungkin bisa mengimplementasikannya dengan mudah dalam bahasa apa pun, saya hanya ingin tahu apakah ada sesuatu yang "siap digunakan" (atau sesuatu seperti bash one-liner) yang saya lewatkan.
Catatan: dalam contoh saya menggunakan pipa biasa, tetapi pertanyaannya sama berlaku untuk pipa bernama
Sementara saya memberikan jawaban di bawah ini, saya juga memutuskan untuk menerapkan perintah leakybuffer karena solusi sederhana di bawah ini memiliki beberapa keterbatasan: https://github.com/CAFxX/leakybuffer