Здесь недостаточно информации, чтобы дать вам окончательный ответ. Во-первых, не ясно, происходит ли это только при запуске с -j2. Что делать, если вы работаете без параллелизма (без -j)? Когда вы говорите «загрузка двухъядерных процессоров [достигает] 100%», что происходит на этих процессорах? Если вы запустите «top» в другом терминале, а затем начнете сборку, что будет отображаться в top?
В качестве альтернативы, если вы запускаете "make -d -j2", какие программы запускаются перед тем, как процессор переходит на 100%?
Тот факт, что рабочий стол не отвечает, также намекает на некоторую другую проблему, а не на использование процессора, поскольку у вас 4 ядра и только 2 заняты. Может быть, что-то жует всю вашу оперативную память? Система возвращается через некоторое время (показывая, что убийца OOM вмешался и что-то топнул)?
Если ничего из этого не помогает, вы можете запустить make под strace, что-то вроде "strace -f make -j2" и посмотреть, сможете ли вы выяснить, что происходит. Это сгенерирует метрическую тонну или две выходных данных, но если, когда процессор подключен, вы увидите, что что-то работает снова и снова, вы можете получить подсказку.
В основном я вижу эти возможности:
- Это вовсе не make, а какая-то команда make, которая просто отключает вашу систему. Вы подразумеваете, что он просто компилирует код C ++, так что это кажется маловероятным, если где-то нет ошибки.
- Марка повторяется бесконечно. Make перестроит свой собственный make-файл плюс любой включенный make-файл, а затем повторно выполнит сам. Если вы не очень осторожны в определении правил для перестроения включенных make-файлов, make может решить, что они всегда устарели, и перестраивать / rexec навсегда.
- Что-то еще
Надеюсь, что приведенные выше советы помогут вам узнать, что происходит.