在MakeFile中收听后台进程退出代码

时间:2012-05-16 21:10:43

标签: shell makefile background-process spawn

解决 我需要在MakeFile中生成后台进程,并考虑它们的退出代码。   情形:

  • 在后台生成了几个进程。
  • MakeFile继续评估(并且不希望在某些循环中检查生成的进程PID等)
  • 某些进程以非零退出代码退出
  • 使用非零退出代码实现实用程序退出

当然,我考虑使用command &在后​​台生成一个进程。

问题:如果指定的命令类似于command &,则make process 不会跟踪它的退出代码。

示例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实用程序不考虑后台进程的退出代码。

P.S。请不要建议存储生成的进程PID并在循环中检查它们有一些sleep延迟等等。需要继续评估MakeFile并自动退出非零代码。

解决方案

do:
        @(echo "background command" ; (echo "[HANDLER] Prev command exits with $$?")) & \
        echo "doing something"

因此我们可以创建一系列命令来处理后台进程的退出状态。

1 个答案:

答案 0 :(得分:0)

这似乎是一个错误的尝试,创建一个可以并行运行多个作业的Makefile,实际上make通常可以为你做这个。

您需要做的就是在make中为每个作业分别命令:

target: job1 job2

job1:
    some_command

job2:
    some_other_command

如果您在Makefile中使用此类内容,然后运行make -j2 target,则some_commandsome_other_command将并行运行。

看看你是否能找到一种方法来制作像这样并行运行你的作品。