解決済み MakeFile でバックグラウンド プロセスを生成し、それらの終了コードも考慮する必要があります。シナリオ:
- いくつかのプロセスがバックグラウンドで生成されます。
- MakeFile は評価を続行します (また、生成されたプロセスの PID をいくつかのループでチェックしたくないなど)
- 一部のプロセスはゼロ以外の終了コードで終了します
- make ユーティリティはゼロ以外の終了コードで終了します
当然、command &
バックグラウンドでプロセスを生成するために使用することを検討しています。
問題:コマンドが次のように指定されている場合command &
、make プロセスはその終了コードを追跡しません。
サンプル1
do:
@false & \
echo "all is normal"
%make -f exit_status_test.mk
all is normal
サンプル 2
do:
@false && \
echo "all is normal"
%make -f exit_status_test.mk
*** Error code 1
Stop in /usr/home/scher/tmp/lock_testing.
サンプル 1 は、make ユーティリティがバックグラウンド プロセスの終了コードを考慮しないことを示しています。
PS 生成されたプロセスの PID を保存したり、sleep
遅延を伴うループでそれらをチェックしたりすることはお勧めしません。MakeFile の評価を続行し、ゼロ以外のコードで自動的に終了する必要があります。
解決
do:
@(echo "background command" ; (echo "[HANDLER] Prev command exits with $$?")) & \
echo "doing something"
したがって、バックグラウンド プロセスの終了ステータスを処理する一連のコマンドを作成できます。