Ayer estaba tratando de compilar el paquete ROOT desde la fuente. Como lo estaba compilando en una máquina monstruo de 6 núcleos, decidí seguir adelante y construir usando múltiples núcleos make -j 6. La compilación se realizó sin problemas y realmente rápido al principio, pero en algún momento se makebloqueó usando 100% de CPU en un solo núcleo.
Busqué en Google y encontré esta publicación en los foros de ROOT. Desde que construí esta computadora, me preocupaba no haber aplicado correctamente el disipador de calor y la CPU se estaba sobrecalentando o algo así. Desafortunadamente, no tengo un refrigerador aquí en el trabajo en el que pueda meterlo. ;-)
Instalé el lm-sensorspaquete y corrí make -j 6nuevamente, esta vez monitoreando la temperatura de la CPU. Aunque se puso alto (cerca de 60 C), nunca pasó la temperatura alta o crítica.
Traté de correr, make -j 4pero nuevamente makecolgué en algún momento durante la compilación, esta vez en un lugar diferente.
Al final, compilé simplemente corriendo makey funcionó bien. Mi pregunta es: ¿por qué estaba colgando? Debido al hecho de que se detuvo en dos puntos diferentes, supongo que se debió a algún tipo de condición de carrera, pero creo que makedebería ser lo suficientemente inteligente como para tener todo en el orden correcto, ya que ofrece la -jopción.
-j >1.
$(shell ...)finalmente estaba ejecutando un comando que estaba esperando la entrada destdin . Esto se produjo cuando una variable estaba vacía y no se pasaron argumentos de archivo al comando.
strace -p <pid>y ver si puede averiguar qué está mirando / buscando. strace solo le mostrará llamadas al sistema (no llamadas a funciones), pero aún podría brindarle información valiosa si está girando mientras mira o busca un archivo en particular.