TCP ソケットを使用するネットワーク プログラムのテストを実行しています。バグ修正を確認するには、ソケット レイヤーで「Broken pipe」エラーを再現する必要がありますが、方法がわかりません。何か案が?どうもありがとう。
3 に答える
「壊れたパイプ」エラー メッセージは通常、シェルが作成した子プロセスが SIGPIPE シグナルによって終了したことを検出すると、シェルから送信されます。そのため、SIGPIPE (kill -PIPE %1
最初のバックグラウンド コマンドを強制終了する) で子を強制終了することにより、手動で発生させることができる場合があります。
SIGPIPE はカーネルによって生成され、もう一方の端が閉じられた後にパイプまたはソケットに書き込もうとするすべてのプロセスに送信されます。
私は周りを見回しましたが、どこにも文書化された手順が見つからなかったので、ここに行きます.
'nc' プロキシ コマンドを使用するサーバーが ssh 構成で見つかりました。
ホストサーバー
ProxyCommand /usr/bin/nc -4 -n -X 5 -x 127.0.0.1:55555 %h %p
ServerAlive オプションを 1 に設定して ssh を実行しました。
> ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=1 e3prosup@server
次に、別のセッションで、ssh に関連付けられている「nc」プロセスを見つけて強制終了しました。kill -9 (SIGKILL) または kill -13 (SIGPIPE) の両方が機能します。
> ps -efa
e3prosup 19502 10955 0 11:43 pts/6 00:00:00 ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=1 e3prosup@server
e3prosup 19503 19502 0 11:43 pts/6 00:00:00 /usr/bin/nc -4 -n -X 5 -x 127.0.0.1:55555 サーバー 22
> 殺す -13 19503
これで、ssh セッションは次のようになります。
e3prosup@server> 書き込みに失敗しました: 壊れたパイプ