0

解決済み 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"

したがって、バックグラウンド プロセスの終了ステータスを処理する一連のコマンドを作成できます。

4

1 に答える 1

0

Makefileこれは、複数のジョブを並行して実行できるを作成しようとする考えが間違っているように思えますが、実際には通常は make で実行できます。

必要なことは、make で各ジョブに個別のコマンドを与えることだけです。

target: job1 job2

job1:
    some_command

job2:
    some_other_command

このようなものをMakefileand then runで使用すると、とmake -j2 targetの両方が並行して実行されます。some_commandsome_other_command

このように make を並行して実行する方法を見つけることができるかどうかを確認してください。

于 2012-05-16T21:46:00.503 に答える