首页 > 解决方案 > make [1]: *** 读取作业管道:资源暂时不可用。停止

问题描述

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

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

制作:3.16.4

我该如何解决这个问题?

标签: makefilecmakebuildmodule

解决方案


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

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


推荐阅读