[#41778] [Bug #3515] FreeBSD wrongly raises ECONNRESET on close(2) — Yui NARUSE <redmine@...>

Bug #3515: FreeBSD wrongly raises ECONNRESET on close(2)

12 messages 2010/07/02

[ruby-dev:41780] Re: [Feature #3513] spawn ..., err: nil

From: Urabe Shyouhei <shyouhei@...>
Date: 2010-07-02 04:47:44 UTC
List: ruby-dev #41780
卜部です。

> まず、標準エラー出力を黙らせるのに close するのは良い方法ではないでしょう。
> close すると、出力が起きたときにエラーになるかもしれません。
> また、なにか他のファイルが 2番という fd に割り当てられていたらそこに
> 出力されてしまうかもしれません。
> たとえばデータベースが割り当てられていて、データベースが壊れたりしたら
> 目も当てられません。

任意の状況で常にstderrを閉じよ、という主張に対する反論としては、妥当なものだと
思います。しかし、私のやりたかったケース(lzma)では上記の心配はありません。

DBなどを使わない場合でもstderrを閉じるのは悪い行為だと思いますか?だとしたらな
ぜそれはspawnでは可能になっているのですか?

私の主張は:closeの位置にnilも受け付けて欲しいというだけですので、stderrを閉じ
ることの是非とは独立した話のはずです。

> では適切な方法は、というと、err:"/dev/null" などとリダイレクトすることです。
> (Unix では)

それは移植性がありません。せっかくspawn使ってるのに。

さらに背景を説明すると、くだんのスクリプトが動く環境には/dev/nullがありませ
ん。Linuxですがキャラクタデバイスへのアクセスが(cgroupで)禁止されています。

In This Thread