【发布时间】:2017-03-17 16:24:50
【问题描述】:
使用标志 -j 运行 make 会使用所有可用的内核,但这有时会导致线程崩溃或发生其他坏事。
在 bash 脚本中,我如何使用 n-1 内核代替(仅当 n>1 否则为 1)。
一定有比这更简单的方法:
NJOBS=$((`getconf _NPROCESSORS_ONLN 2>/dev/null \
|| sysctl hw.ncpu \
|| echo 2` \
- 1))
【问题讨论】:
-
顺便说一下,
NJOBS全部大写并不是一种好的形式——参见POSIX Issue 7 spec on environment variables,它指定全大写名称用于对操作系统和有意义的变量shell,并且保留至少一个小写字符的名称供应用程序使用。由于设置 shell 变量将覆盖任何类似命名的环境变量,因此该约定也适用于此。 -
即使您的不那么简单的解决方案也无法处理
n = 1案例,还是我遗漏了什么?