【问题标题】:make [1]: *** read jobs pipe: Resource temporarily unavailable. Stopmake [1]: *** 读取作业管道:资源暂时不可用。停止
【发布时间】:2021-01-29 17:23:03
【问题描述】:

我有一段时间面临这个问题:

make [1]: *** read jobs pipe: Resource temporarily unavailable. Stop.

我有一个顶级 makefile,它根据规则“调用”额外的 cmake 和 make。

target A 是一个相对较小的代码 (C/C++)。 target B 要大得多。

该问题主要发生在构建target B 期间,但并非总是如此。我使用 make 3.82。

我已经尝试使用 make 4.3 并且它总是发生。

这是我的构建系统的骨架:

MAKEFLAGS = --jobs=10 --max-load=20

<target A>:
    +. /usr/share/Modules/init/bash &&
    module load <target> &&
    cmake --build <project buildsystem> --target <target A>

<target B>: <target A>
    +. /usr/share/Modules/init/bash &&
    module load <target> &&
    make -C <path> <target B> &&
    cmake --build <project buildsystem> --target <target B>

/usr/share/Modules/init/bash

当特定于 shell 的初始化脚本被引入到 shell 时,模块包和模块命令被初始化。该脚本将模块命令创建为别名或函数,并创建模块环境变量。

https://modules.readthedocs.io/en/latest/module.html

--max-load 等于构建服务器上的内核数。--jobs 是它的一半。)

我已验证 MAKEFLAGS 正确通过(我已在构建期间检查了 gcc/g++ 进程的数量)并且我没有收到此警告:

warning: -jN forced in submake: disabling jobserver mode.

主机操作系统:RedHat 7.6

cmake: 3.16.4

我该如何解决这个问题?

【问题讨论】:

    标签: makefile cmake build module


    【解决方案1】:

    我在嵌套制作时遇到了同样的错误。问题最终是硬件。我添加了一个 CPU 温度调节后台作业以将 CPU 内核保持在 85C 以下,并且错误消失了。

    我的系统是 core-i9 10850K,带有一个非常小的水冷却器。在编译的繁重部分,核心温度从原来的 5GHz 降低到大约 3.8GHz。没有油门,核心温度实际上达到了 100C。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 2021-02-21
      相关资源
      最近更新 更多