2017-08-29 7 views
0

を失敗した場合、私は、私は経由で実行する2つのプロセスを持っているすべての並列プロセスを殺しますそれに対していくつかのコマンドを実行します(ユーザーの追加など)。バッシュは、1つの

init_thing関数は、start_thingがタイムアウトしたとみなすと、ゼロ以外の終了コードで失敗する可能性があります。 start_thing関数は失敗する可能性がありますが、成功すると永遠に実行されます。

init_thingが失敗した場合は、start_thingを殺してください。

多くの答えでGNU parallelが使用されていますが、両方のプロセスが完了している(つまり、終了コードがゼロで終了しています)場合があります。

bashでこれを行う方法はありますか?おそらくparallelを使って私が見たことがない/理解したことがありますか?

+0

'start_thing&PID = $ !;を書くことが明確である反射後

trap 'kill $pid' ERR 

を殺すためのpid変数が含まれている場合は、有用である可能性がありますもし! init_thing; "$ pid"を殺す。 fi' – Leon

答えて

0

トラップERRは、プロセスのpidは、明示的に

init_thing || { 
    echo "something goes wrong, killing $pid" 
    kill "$pid" 
}