Ontem eu estava tentando compilar o pacote ROOT a partir do código-fonte. Desde que eu estava compilando em uma máquina monstro de 6 núcleos, decidi ir em frente e construir usando vários núcleos usando make -j 6. A compilação foi suave e muito rápida no início, mas em algum momento maketravou usando 100% da CPU em apenas um núcleo.
Eu pesquisei no Google e encontrei este post nos quadros de mensagens do ROOT. Desde que eu mesmo construí este computador, fiquei preocupado por não ter aplicado corretamente o dissipador de calor e a CPU estar superaquecendo ou algo assim. Infelizmente, não tenho uma geladeira aqui no trabalho onde posso colocá-la. ;-)
Instalei o lm-sensorspacote e executei make -j 6novamente, desta vez monitorando a temperatura da CPU. Embora tenha ficado alto (perto de 60 ° C), nunca passou da temperatura alta ou crítica.
Tentei correr, make -j 4mas novamente fiquei makesuspenso em algum momento durante a compilação, desta vez em um local diferente.
No final, eu compilei apenas rodando makee funcionou bem. Minha pergunta é: Por que estava pendurado? Devido ao fato de ter parado em dois pontos diferentes, acho que foi devido a algum tipo de condição de corrida, mas acho que makedeveria ser inteligente o suficiente para colocar tudo na ordem certa, pois oferece a -jopção.
-j >1.
$(shell ...)estava executando um comando que estava aguardando a entrada destdin . Isso foi causado quando uma variável estava vazia e nenhum argumento do arquivo foi passado para o comando.
strace -p <pid>e veja se você consegue descobrir o que ele está procurando /. O strace mostrará apenas syscalls (não chamadas de função), mas ainda poderá fornecer informações valiosas se estiver girando enquanto você olha ou procura um arquivo específico.