Wczoraj próbowałem skompilować pakiet ROOT ze źródła. Ponieważ kompilowałem go na 6-rdzeniowej maszynie z potworami, postanowiłem zacząć budować za pomocą wielu rdzeni make -j 6. Kompilacja przebiegła początkowo płynnie i naprawdę szybko, ale w pewnym momencie makezawiesiła się przy użyciu 100% procesora tylko na jednym rdzeniu.
Zrobiłem trochę googlingu i znalazłem ten post na forach dyskusyjnych ROOT. Ponieważ sam zbudowałem ten komputer, martwiłem się, że nie zastosowałem prawidłowo radiatora, a procesor się przegrzał. Niestety nie mam tu w pracy lodówki, w której mogłabym ją włożyć. ;-)
Zainstalowałem lm-sensorspakiet i uruchomiłem make -j 6ponownie, tym razem monitorując temperaturę procesora. Chociaż stał się wysoki (blisko 60 ° C), nigdy nie przekroczył wysokiej lub krytycznej temperatury.
Próbowałem biegać, make -j 4ale ponownie makezawiesiłem się podczas kompilacji, tym razem w innym miejscu.
W końcu skompilowałem tylko działający makei działało dobrze. Moje pytanie brzmi: dlaczego zwisało? Z uwagi na fakt, że zatrzymał się w dwóch różnych miejscach, sądzę, że było to spowodowane jakimś stanem wyścigowym, ale uważam, że makepowinno być wystarczająco sprytne, aby wszystko ułożyć we właściwej kolejności, ponieważ oferuje taką -jopcję.
-j >1.
$(shell ...)ostatecznie uruchomiono polecenie, które czekało na dane wejściowestdin . Stało się tak, gdy zmienna była pusta i do komendy nie przekazano argumentów pliku.
strace -p <pid>I sprawdzić, czy możesz dowiedzieć się, na co on patrzy / na co. strace pokaże tylko wywołania systemowe (nie wywołania funkcji), ale nadal może dostarczyć cennych informacji, jeśli obraca się podczas przeglądania lub określonego pliku.