Hier, j'essayais de compiler le package ROOT à partir des sources. Comme je le compilais sur une machine monstre à 6 cœurs, j'ai décidé d'aller de l'avant et de construire en utilisant plusieurs cœurs en utilisant make -j 6
. La compilation s'est déroulée en douceur et très rapidement au début, mais à un moment donné, elle a été make
suspendue en utilisant 100% de CPU sur un seul cœur.
J'ai fait quelques recherches sur Google et j'ai trouvé ce message sur les babillards électroniques de ROOT. Depuis que j'ai construit cet ordinateur moi-même, je craignais de ne pas avoir correctement appliqué le dissipateur thermique et le processeur surchauffait ou quelque chose. Malheureusement, je n'ai pas de réfrigérateur ici au travail où je peux le coller. ;-)
J'ai installé le lm-sensors
package et exécuté à make -j 6
nouveau, cette fois en surveillant la température du processeur. Bien qu'elle soit devenue élevée (près de 60 ° C), elle n'a jamais dépassé la température élevée ou critique.
J'ai essayé de courir, make -j 4
mais j'ai de nouveau make
suspendu pendant la compilation, cette fois à un endroit différent.
En fin de compte, j'ai compilé juste en cours d'exécution make
et cela a bien fonctionné. Ma question est: pourquoi était-elle suspendue? En raison du fait qu'il s'est arrêté à deux endroits différents, je suppose que cela était dû à une sorte de condition de course, mais je pense qu'il make
devrait être assez intelligent pour tout mettre dans le bon ordre car il offre l' -j
option.
-j >1
.
$(shell ...)
exécutait finalement une commande qui attendait l'entrée destdin
. Cela était dû au fait qu'une variable était vide et qu'aucun argument de fichier n'était transmis à la commande.
strace -p <pid>
et voir si vous pouvez découvrir ce qu'il cherche / cherche. strace ne vous montrera que les appels système (pas les appels de fonction), mais il pourrait toujours vous donner des informations précieuses s'il tourne en regardant ou pour un fichier particulier.