【问题标题】:Listen to background process's exit code in MakeFile在 MakeFile 中监听后台进程的退出代码
【发布时间】:2012-05-16 21:10:43
【问题描述】:

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

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

当然,我正在考虑使用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 实用程序不考虑后台进程的退出代码。

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

解决方案

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

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

【问题讨论】:

    标签: shell makefile background-process spawn


    【解决方案1】:

    创建一个可以并行运行多个作业的Makefile 似乎是一种不明智的尝试,而实际上 make 通常可以为您执行此操作。

    你需要做的就是在 make 中给每个作业一个单独的命令:

    target: job1 job2
    
    job1:
        some_command
    
    job2:
        some_other_command
    

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

    看看你是否能找到一种方法让 make 像这样并行运行你的工作。

    【讨论】:

    • 我认为它不适合我正在使用的 MakeFile,因为它是来自 FreeBSD Ports Collection 的 bsd.port.mk。所有手册都声明使用 -j 选项尽可能准确,并编写与此选项兼容的文件。
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多