Ieri stavo cercando di compilare il pacchetto ROOT dal sorgente. Da quando lo stavo compilando su una macchina mostro a 6 core, ho deciso di andare avanti e costruire usando più core usando make -j 6. La compilazione è stata semplice e molto veloce all'inizio, ma a un certo punto si è makebloccata usando la CPU al 100% su un solo core.
Ho cercato su Google e ho trovato questo post nelle bacheche dei messaggi ROOT. Da quando ho costruito questo computer da solo, ero preoccupato di non aver applicato correttamente il dissipatore di calore e la CPU si stava surriscaldando o qualcosa del genere. Sfortunatamente, non ho un frigorifero qui al lavoro in cui posso attaccarlo. ;-)
Ho installato il lm-sensorspacchetto ed eseguito di make -j 6nuovo, questa volta monitorando la temperatura della CPU. Sebbene sia diventato alto (vicino a 60 ° C), non ha mai superato la temperatura alta o critica.
Ho provato a correre make -j 4ma ancora una volta ho makeappeso durante la compilazione, questa volta in un punto diverso.
Alla fine, ho compilato solo in esecuzione makee ha funzionato bene. La mia domanda è: perché era sospeso? A causa del fatto che si è fermato in due punti diversi, immagino che fosse dovuto a una sorta di condizione di gara, ma penso che makedovrebbe essere abbastanza intelligente da ottenere tutto nel giusto ordine poiché offre l' -jopzione.
-j >1.
$(shell ...)stava infine eseguendo un comando in attesa di input dastdin . Ciò è stato causato quando una variabile era vuota e nessun argomento di file è stato passato al comando.
strace -p <pid>e vedi se riesci a scoprire cosa sta cercando / per. strace ti mostrerà solo syscall (non chiamate di funzione), ma potrebbe comunque darti informazioni preziose se gira mentre guarda o per un determinato file.