当我编译东西时,我通常想快速做到这一点,所以在我的工作站上我发布
make -j16
并且(gnu)make开始使用16个内核进行编译。然而,当我回到我的笔记本电脑上时,那里没有16个核心。因此,当我发出相同的命令时,我的机器冻死了。我不能通过CTRL + ALT + F1等切换到备用终端,也不能成功远程登录。 CTRL + C,CTRL + 4都不会被视为。 (顺便说一句:没有自动杀死会成功,例如自动内存不足)我必须关闭机器电源。 (我使用Ubuntu 11.10和内核3.0.x)
一种解决方案是提前获得当前机器上可用的核心数量,其中包含任何其他“并行”目标所依赖的小型制造目标,并且不直接使用“make -j $ NUMCORES”。 (我已经完成了这一点,并使用一个使用boost线程的小型c ++程序实现)。但这不会保护我不会再意外地指定“make -j16”。
“太多”核心也不能与可用核心数量相同(包括线程核心),因为+1或+2线程仍然不会杀死机器。
我可以使用ulimits来缓解这个问题吗?我虽然指定将交换空间设置为0.然后我应该改变中止我 猜测 。
你为什么不发布这个答案?谢谢!
—
math
因为它没有 防止 你从跑步
—
grawity
make -j16
,它只有一点恢复的机会。
是的你是对的;),然而这比我迄今为止使用的特殊制作目标要好得多!
—
math
export MAKEFLAGS="-j$(nproc)"
可以用;不需要特殊的makefile。对于第二个,alias make="nice ionice make"
也许?