svn logでBroken pipe発生

現象

svn log を head でパイプすると Broken pipe エラーが発生する

$ svn log | head -n0
svn: Write error: Broken pipe

原因

head コマンドは、出力に必要な入力を受け取ると標準入力をクローズして終了し、一方で svn log はクローズされた標準出力(パイプ)にライトしようとして SIGPIPE シグナルを受け取る。
シグナルハンドラーをいじっていなければ、そのまま強制終了するのだけど、svn log はこのシグナルを SIG_IGN しているようで、ライトがエラー EPIPE で異常終了する。

類似の問題

Pythonruby でも類似の問題が発生する。

Python のマニュアルの signal の冒頭には SIGPIPE SIG_IGN していることが書かれている、

Python installs a small number of signal handlers by default: SIGPIPE is ignored (so write errors on pipes and sockets can be reported as ordinary Python exceptions) and SIGINT is translated into a KeyboardInterrupt exception. All of these can be overridden.
http://docs.python.org/2/library/signal.html

実際に試すと

$ python -c "print ('\n'* 10000)" | head -n0
Traceback (most recent call last):
  File "<string>", line 1, in <module>
IOError: [Errno 32] Broken pipe

対応

subversion ではこの問題が 2007 年から報告されており、2011 年に修正され 1.7 からエラーメッセージが改善されている模様。(手元に svn 1.7 以上がないので未確認)

#3014 :”svn log | head” should not print “Write error: Broken pipe”
http://subversion.tigris.org/issues/show_bug.cgi?id=3014

Python/ruby などでは、プログラム内で SIG_IGN SIG_DFL に変更するとその場しのぎ的に解消はできる。

signal(SIGPIPE,SIG_DFL)

だけど、言語レベルで挙動をかえてほしいなぁ、、、

Advertisements
Tagged with: , , ,
Posted in linux
One comment on “svn logでBroken pipe発生
  1. […] しらべたらそういうものらしいので放置。(もう大丈夫かもしれんけど大事なとこでないので受け入れる。) […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 6 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 6 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 6 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 1 year ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago
%d bloggers like this: