makefile - 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
我该如何解决这个问题?
解决方案
我在嵌套制作中遇到了完全相同的错误。问题最终是硬件。我添加了一个 CPU 温度调节后台作业,以将 CPU 内核保持在 85C 以下,并且错误消失了。
我的系统是带有非常小的水冷却器的core-i9 10850K。在编译的繁重部分,核心温度从原来的 5GHz 降低到大约 3.8GHz。没有油门,核心温度实际上达到了 100C。
推荐阅读
- regex - 如果在 YML 文件中使用正则表达式为空,则删除第一行
- angular - Leaflet map draggable - 如何在拖动事件中调用函数或更改类变量
- python-3.x - 如何从列表中获取字符串并将其与另一个字符串进行比较?
- html - 我可以在我的 Github 存储库的 README.md 中嵌入 Plotly 生成的 html 文件吗?
- java - SMALL_PRIME_PRODUCT 在 BigInteger 中的意义
- nginx - 在反向代理服务器 + Python HTTPS 服务器中,谁应该处理 HTTPS 连接的 SSL 证书?
- xml - 使用 PowerShell 替换嵌套 XML 中的值
- python - Pandas:如何在 COVID-19 数据框中找到局部爆发达到峰值的平均天数?
- c - 我每次在 C 中的 rand() 中都得到相同的值
- git - 简单的 git 合并概念