クローズされたPIPE(含、ネットワークソケット)にアクセスすると、アクセスしたプロセス(アプリ)に対して、SIGPIPEシグナルが通知される。 デフォルトではSIGPIPEシグナルを受信したプロセスは強制終了される。 強制終了を回避するためには、以下のいずれかの対策を取る必要がある。 SIGPIPEシグナルを無視する設定を与える 全面的に無視する
クローズされたPIPE(含、ネットワークソケット)にアクセスすると、アクセスしたプロセス(アプリ)に対して、SIGPIPEシグナルが通知される。 デフォルトではSIGPIPEシグナルを受信したプロセスは強制終了される。 強制終了を回避するためには、以下のいずれかの対策を取る必要がある。 SIGPIPEシグナルを無視する設定を与える 全面的に無視する
前回、「次回もシグナルのことを書く」と書いたのでシグナルのことを書く*1. ソケットプログラミングの落とし穴は色々あるけど、ここでは個人的に嵌ったシグナル関連の落とし穴に関して書き殴る. 結論から書くと、コネクションが切れたソケットに書き込み(send(2)とかwrite(2)とか、同じものだけど)を行うと、SIGPIPEシグナルが発生してプロセスが強制終了するので、きちんとSIGPIPEシグナルをハンドリングしておこうという話. 以下では、サンプルコードを使って、実際にパイプの書き込み先をkillして、SIGPIPEの発生を疑似体験してみる. SISGPIPEを受けたプロセスの挙動とソケットプログラミングでの対応策 「sigpipe」で検索すると、同様の話はいくらでも記事になっていて、例えば、 「私の書いたサーバが突然死するんです。どうしてでしょうか」という質問を受けることがあります。こ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く