xargs は、実行可能な最大数のプロセスをすでに実行している場合でも、stdin から入力行を読み取るように見えます。
次に例を示します。
#!/bin/bash
function xTrigger()
{
for ii in `seq 1 100`; do echo $ii; sleep 2; done
}
function xRunner()
{
sleep 10;
echo $1;
}
export -f xTrigger
export -f xRunner
bash -c "xTrigger" | xargs -n 1 -P 1 -i bash -c "xRunner {}"
上記のプロセスを開始してから 20 秒後、Ikillall xTrigger
ですが、xargs は xTrigger が出力したすべてをバッファリングしたため、xRunner は 1..10 を出力し続けました。私が欲しいのは、1,2だけを印刷することです
この動作を変更して、新しいコマンドを開始する場合にのみ xargs を stdin から読み取るようにして、xargs が読み取るまで xTrigger が echo ステートメントで待機するようにする方法はありますか? 私の標準入力には非常に動的なコンテンツがあるため、これは非常に便利です。
安定していてエレガントだからという理由だけで xargs に固執しようとしています。xargs で簡単な方法がない場合にのみ、余分なコードを書きたい。
ご助力いただきありがとうございます!