非同期サブシェル出口を処理する方法

非同期サブシェル出口を処理する方法

私がこれを持っているとしましょう:

set -e;

(
    docker stop notifier-server
    docker rm -f notifier-server
    exit 1  # explicitly exit with non-zero
) &

wait;

echo 'we are here now'

サブシェルがゼロ以外の値で終了しても、常にエコーラインに到達しますか?バックエンドプロセス/サブシェルなので、そうです。

この問題を見る正しい方法は何ですか?

ベストアンサー1

プロセスがバックグラウンドプロセスであるかどうかには関係がなく、waitコマンドの終了状態に関連しています。

からhelp wait

IDが指定されていない場合は、現在アクティブなすべての子プロセスが待機し、ステータス0が返されます。

$ bash -exc '(sleep 1; exit 1) & wait ; echo done'
+ wait
+ sleep 1
+ exit 1
+ echo done
done

-nオプションが指定されている場合は、次のジョブが終了するのを待って終了ステータスを返します。

$ bash -exc '(sleep 1; exit 1) & wait -n; echo $?:done'
+ wait -n
+ sleep 1
+ exit 1

おすすめ記事