[sisyphus] Re: broken pipe

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Сен 7 13:11:05 MSD 2005


On Mon, Sep 05, 2005 at 03:19:19AM +0400, Dmitry V. Levin wrote:
> > Мне от робота на stderr происходит следующий стук:
> > /raid/at/qa/qa-robot/qa-robot: line 113: 14965 Broken pipe	perl -MList::Util=shuffle -e 'print shuffle(<>)' ${1+"$@"}
> > 
> > 	shuffle() { perl -MList::Util=shuffle -e 'print shuffle(<>)' ${1+"$@"}; }
> > 	shuffle {bad,pending}.bugs |head -20 |sort -u |shuffle |head -10 |xfmt1
> > 
> > Кто-нибудь может объяснить, почему он происходит?
> 
> Это классика: какая-то программа (perl -M...) генерит много строк, head
> использует только первые несколько, в результате канал закрывается до
> того, как perl успевает всё туда записать, и perl получает SIGPIPE.

А кто говорит "Broken pipe"?  То есть это shell говорит, когда делает
wait(2) и видит WIFSIGNALED и WTERMSIG == SIGPIPE?  Кажется, я начинаю
понимать, как это всё работает. :)

И как же от этой напасти защититься?  То есть процесс получает SIGPIPE
при первой же попытке записи в дохлый пайп?  Если бы wirte(2) хотя бы
один раз -1 вернул, перл может быть и сам бы отвалил.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20050907/7241bf43/attachment-0003.bin>


Подробная информация о списке рассылки Sisyphus