Bu durumda "Kırık boru" görünmesi nadirdir, ancak normaldir.
Çalıştırdığınızda type rvm | head -1
, bash type rvm
bir işlemde diğeri içinde yürütülür head -1
. 1 stdout borununtype
"yazma" ucuna , "okuma" ucuna std bağlı . Her iki işlem de aynı anda çalışır.head
head -1
İşlem Stdin'den (genellikle 8 kB parçalar halinde) verileri, (göre tek bir hat üzerinden baskı okur -1
borusunun "okuma" ucu kapatılabilir neden seçeneği) ve çıkışları. Yana rvm
fonksiyonu, bu araçlar (ayrıştırılır ve Bash tarafından yeniden inşa ediliyor sonra 11 kB civarında) oldukça uzun head
çıkışlar ise type
hala birkaç veri kB vardır dışarı yazmak için.
Bu noktada, type
diğer ucu kapalı olan bir boruya yazmaya çalıştığından - kırık bir boru - yaktığı yazma () işlevi "Kırık boru" olarak çevrilen bir EPIPE hatası döndürecektir. Bu hataya ek olarak, çekirdek type
, varsayılan olarak işlemi hemen öldüren SIGPIPE sinyalini de gönderir .
(Sinyal, etkileşimli mermilerde çok kullanışlıdır, çünkü çoğu kullanıcı ilk işlemin çalışmaya devam etmesini ve hiçbir yere yazmaya çalışmasını istemez. Böylesine basit bir hatada ölürler - böylece hata kodunu çok faydalı bulurlar.)
Bununla birlikte, sinyal iletimi hemen% 100 değildir ve write () 'nin EPIPE'yi döndürdüğü ve işlemin sinyali almadan önce kısa bir süre boyunca çalışmaya devam ettiği durumlar olabilir. Bu durumda, type
başarısız yazmayı fark etmek, hata kodunu çevirmek ve hatta SIGPIPE tarafından öldürülmeden önce stderr'e bir hata mesajı basmak için yeterli zaman alır. (Hata mesajında "-bash: type:" yazıyor type
, çünkü bash komutunun kendisinde yerleşik bir komut var.)
Bu, çok işlemcili sistemlerde daha yaygın görünüyor, çünkü type
işlem ve çekirdeğin sinyal teslim kodu aynı anda farklı çekirdeklerde çalışabiliyor.
Bu mesajı, type
yerleşik (bash kaynak kodunda) write () işlevinden bir EPIPE aldığında hemen çıkmak için yamayı ekleyerek kaldırmak mümkün olacaktır .
Ancak, endişelenecek bir şey yok ve rvm
herhangi bir şekilde kurulumunuzla ilgili değil .