昨天我正尝试从源代码编译ROOT软件包。由于我是在6核怪物机器上进行编译的,因此我决定继续使用并使用多核进行构建make -j 6
。最初编译过程非常顺利,而且速度非常快,但有时make
仅在一个内核上使用100%CPU即可挂起。
我进行了一些谷歌搜索,并在ROOT留言板上找到了此帖。自从我自己构建了这台计算机以来,我担心自己没有正确安装散热器,并且CPU过热或其他原因。不幸的是,我在工作中没有冰箱可以插入。;-)
我安装了lm-sensors
软件包并make -j 6
再次运行,这次监视CPU温度。尽管温度很高(接近60摄氏度),但从未超过高温或临界温度。
我尝试运行,make -j 4
但是make
在编译过程中的某个时间再次挂起,这次是在另一个位置。
最后,我仅在运行时进行编译make
,并且运行良好。我的问题是:为什么挂了?由于它停在两个不同的位置,我想这可能是由于某种比赛条件造成的,但是我认为make
应该聪明到足以使所有东西都处于正确的顺序,因为它提供了-j
选择。
-j >1
。
$(shell ...)
最终运行的命令正在等待来自的输入stdin
。这是由于变量为空并且没有文件参数传递给命令而引起的。
strace -p <pid>
,查看是否可以找到其查找/查找的内容。strace仅显示系统调用(而不是函数调用),但是如果在查看或查找特定文件时旋转,它仍可以为您提供有价值的信息。