0

UNIX の名前付きパイプに問題があります。出力をパイプに書き込むプログラム A があり (P を考えてください)、別のプログラム (B を考えてください) がこのパイプを入力ファイルとして使用しているとします。問題は、プログラム B が失敗したときにプログラム A を外部から中断するにはどうすればよいかということです。状況は、次の疑似スクリプトに似ています。

mkfifo P
A -output P &
B -input P &
if ( $! != 0 ) //somehow interrupt A
4

1 に答える 1

2

PID を保持します。

mkfifo P
A -output P &
pidA=$!
B -input P
if ( $? != 0 )
    kill $pidA

$!最後に実行されたバックグラウンド コマンドの PID に展開されます。

$?終了コードに展開されます。

これが機能するBためには、終了コードを取得できないため、バックグラウンドで実行できないことに注意してください。

それでもバックグラウンドで実行したい場合は、次を使用します。

( B -input P || kill $pidA ) &
于 2012-08-29T13:04:15.017 に答える