[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:04373] zsh and Broken pipe



zshを使ってるとdpkg-sourceなどが正常に動作しない問題で、調査
してみました。

現象としては、子プロセスがBroken pipeのエラー (EPIPE) により
エラー終了してしまって、親が処理を中断してしまうというもので
す。bashから起動すると全く問題ありません。

簡単なテストプログラムを作って調べたところ、zshから実行され
たプロセスでは、SIGPIPEハンドラーがSIG_IGN (無視) になってい
るのが分かりました。一方、bashから同じプログラムを実行した場
合は、SIG_DFLでした。

マニュアルによると、SIGPIPEのハンドラーをSIG_IGNにすると、切
れたパイプに対するwriteがEPIPEのエラーを起こすようになります。
つまり、EPIPEを特別扱いにしていない限り、多くのプログラムは
エラー終了することになります。

さて、この問題の回避策ですが、結論からいえば、trapコマンドで
適当なハンドラーを設定するだけでした。とりあえずこちらではう
まく動いています。

参考にでもなれば。
-- 
ささやま <Kaz.Sasayama@xxxxxxxxxxxxxxx> / 有限会社ハイパーコア
「日本で最初のDebian GNU/Linuxコンサルタント」
* <URL:http://www.debian.org/consultants.html#Japan> を参照