問題タブ [sigpipe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1176 参照

ios - SIGPIPE シグナルを無視しても、IOS 6.0 で SIGPIPE エラーが発生する

サンプル アプリでは、main.m ファイルでそのシグナルを無視したにもかかわらず、SIGPIPE エラーが表示されます。

gdbのバックトレースは

スタンバイ モードに戻ってから戻ると、このエラーが発生します。IOS 6.0 を使用して IPAD でテストしました。Xcode のバージョンは 4.5/5.0 です。

0 投票する
1 に答える
905 参照

c - EPIPEエラーが出ない?

SIGPIPE について読んだ内容に基づいて、SIGPIPE の問題を生成するためのテストを行いました。サーバーとクライアントのコードは次のとおりです。

サーバーコード:

クライアントコード:

実験の設定方法は次のとおりです。最初にサーバーを起動し、次にクライアントを起動しました。クライアントが「メッセージを入力してください:」というメッセージを出力した後、サーバーを停止しました。次に、送信するテキスト (「test」など) をクライアントに入力しようとしました。を使用したため、クライアントからのエラー コードsignal(SIGPIPE, SIG_IGN)を期待していましたが、何も得られませんでした。EPIPEクライアントは次のように出力しました。

何か不足していますか?EPIPE書き込み操作でエラーを返すようにコードを設定するにはどうすればよいですか?

0 投票する
3 に答える
9764 参照

python - エラーコード141のBashパイプフェイルを無視する

bashpipefailオプションを ( 経由でset -o pipefail) 設定すると、パイプの任意のステップでゼロ以外のエラーが発生した場合に、スクリプトが失敗するようになります。

ただし、SIGPIPE存在しないパイプにデータが書き込まれるというエラー (エラー コード 141) が発生しています。

エラーを無視するように bash を設定する方法はありますSIGPIPEか、またはすべてのエラーステータスコードを処理するエラーハンドラーを作成する方法がありますが、たとえば 0 と 141 はありますか?

たとえば、Python では、以下を追加できます。

エラーにデフォルトの動作を適用するにはSIGPIPE: エラーを無視します ( http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-06/3823.htmlを参照)。

bashで利用できる同様のオプションはありますか?

0 投票する
2 に答える
539 参照

perl - どのパイプが SIGPIPE をスローしたかを検出することは可能ですか?

次のように機能するサーバーを処理しようとしています。

  • 親プロセスがある
  • いくつかの特別なタスクを処理する「ヘルパー」子プロセスを作成します
    • パイプで子プロセスを開きます。パイプを使用して子にコマンドを発行します。
  • また、他の多くの子プロセスを生成します (サーバーの主な目的は、さまざまなコマンドを実行することです)。

子プロセスへのパイプへの書き込みがいつ失敗したかを検出できるようにしたいと考えています。と特別通知書を発行します。

通常は$SIG{PIPE}、親プロセスでカスタム ハンドラーを作成することでこれを実現します。

ただし、私が懸念しているのは、コマンドを実行するために親が起動するプロセスの一部が、独自のパイプを開いている可能性があるという事実です。これらのパイプへの書き込みが失敗した場合は、単に SIGPIPE を無視したいと思います。

Q1. SIGPIPE ハンドラー内から、開いているパイプのどれがシグナルをスローしたかを知る方法はありますか? (私はすべての子の PID を知っているので、PID で問題ありません... または、ファイル記述子 #s を介してそれを行う方法がある場合は?)。

Q2. どういうわけか使用して問題を解決できlocal $SIG{PIPE}ますか?私の仮定は、私がする必要があるということです:

  • そのパイプに書き込む前にヘルパープロセス固有のlocal $SIG{PIPE}権利を設定する
  • do print $HELPER_PIPE(これは 1 つのサブルーチンでのみ発生します)
  • $SIG{PIPE} をDEFAULTまたはにリセットしますIGNORE
  • これら 3 つのアクションが独自のブロック スコープ内にあることを確認します。
0 投票する
0 に答える
1181 参照

c - SIGPIPE シグナル処理

関連する 2 つのプロセス間のパイプ通信がどのように機能するかを理解しようとしているので、この単純な C プログラムを作成しました。

私がパイプを作成し、子がそれに何かを書き込み、親がメッセージを読み、読み取り側のパイプを閉じます。今までは完全に機能していましたが、パイプが読み取り側で閉じられた状態で 2 番目のメッセージを送信しようとすると、sigpipe_h 関数によって処理される SIGPIPE シグナルが発生するはずですよね? なぜそれが起こらないのですか?どこが間違っていますか?

助けてくれてありがとう。

0 投票する
2 に答える
1118 参照

c - クローズ ソケットへの書き込みで期待どおりに SIGPIPE が発生しませんでした

を防ぐ方法についてはすでに読んだのでSIGPIPE、それをテストする小さなプログラムを書きます。これがコードです。

server.c

client.c

サーバーとクライアントを同じ Linux マシンで実行すると、サーバー側で、クライアント側でソケットを閉じたためにシグナルwrite()を期待している間に最初に書き込まれたバイト数が返され、2 番目にシグナルが生成されます。 しかし、別の Linux マシンまたは Windows マシン (Winsock で同じクライアントを実装) でクライアントを実行したとき、シグナルをキャッチせず、2 番目はまだ. 誰かが私に何が起こっているのか教えてもらえますか?SIGPIPEwrite()SIGPIPE
SIGPIPEwrite()buffer

0 投票する
1 に答える
399 参照

gdb - Eclipse CDT: スレッドがデバッグモードで SIGPIPE を取得しています

ソケットプログラミングとマルチスレッドに基づいて、C言語で書かれたツールがあります。ツールを単純に実行すると、エラーは発生せず、ツールは問題なく機能します。

しかし、ツールをデバッグ モードで実行すると、スレッドを切り替えると SIGPIPE シグナルが発生するため、ツールからサーバーにデータを転送できませんでした。

SIGNAL(SIGPIPE, SIG_IGN) を使用して SIGPIPE を処理すると、スレッドが機能しますか?

私が理解している限り、これはスレッド間のプロセス間通信の失敗が原因で発生しています。もしそうなら、どうすればそのようなマルチスレッドアプリケーションをデバッグできますか?

この問題を処理する方法を教えてください。

0 投票する
1 に答える
2586 参照

linux - Trap SIGPIPE when trying to write without reader

I am trying to implement a named-pipe communication solution between two processes in Bash.

The first process writes something to the named pipe:

And the second script is supposed to read the named pipe like this:

Note that the named pipe has been previously created using the traditional command

My problem is that the reader script is not always running so that if the writer script tries to write to the named-pipe it will stay blocked until a reader connects to the pipe.

I want to avoid this behavior, and a solution would be to trap a SIGPIPE signal. Indeed, according to man 7 signal is supposed to be sent when trying to write in a pipe with no reader. So I changed my red function by:

But when I run the reader script, the script stays blocked, and "SIGPIPE received" does not get printed.

Am I mistaking on the signal mechanism or is there any better solution to my problem?