Eu não tenho uma resposta para este problema específico, mas posso tentar dar uma pista do que pode estar acontecendo: Faltam dependências em Makefiles.
Exemplo:
target: a.bytecode b.bytecode
link a.bytecode b.bytecode -o target
a.bytecode: a.source
compile a.source -o a.bytecode
b.bytecode: b.source
compile b.source a.bytecode -o a.bytecode
Se você chamar make target
, tudo será compilado corretamente. A compilação de a.source
é executada (arbitrariamente, mas deterministicamente) primeiro. Em seguida, a compilação de b.source
é executada.
Mas se os comandos make -j2 target
both compile
forem executados em paralelo. E você realmente notará que as dependências do seu Makefile estão quebradas. A segunda compilação assume que a.bytecode
já está compilado, mas não aparece nas dependências. Portanto, é provável que um erro aconteça. A linha de dependência correta para b.bytecode
deve ser:
b.bytecode: b.source a.bytecode
Para voltar ao seu problema, se você não tiver sorte, é possível que um comando permaneça em um loop de 100% da CPU, devido a uma dependência ausente. Isso é provavelmente o que está acontecendo aqui, a dependência ausente não pôde ser revelada por uma construção sequencial, mas foi revelada pela sua construção paralela.