Когда я собираю материал, я обычно хочу сделать это быстро, поэтому на своей рабочей станции я выдаю
make -j16
И (gnu) make начинает компилировать с 16 ядрами. Однако, когда я вернулся на свой ноутбук, у меня там не было 16 ядер. Поэтому, когда я выполняю ту же команду, моя машина замерзает. Я не могу переключиться на альтернативные терминалы через CTRL+ALT+F1 и т.д., Но удаленный вход не будет успешным. CTRL+C, CTRL+4 ни один из них не будет рассматриваться. (Кстати: автоматическое уничтожение не удастся, например, автоматически из памяти). Мне нужно выключить компьютер. (Я использую Ubuntu 11.10 с ядром 3.0.x)
Одно из решений заключается в том, чтобы заранее получить количество ядер, доступных на текущем компьютере, с небольшой целью make, от которой зависят любые другие "параллельные" цели, и напрямую не использовать «make -j $ NUMCORES». (Я уже сделал это и реализовал с помощью небольшой программы на C ++, использующей потоки повышения). Но это не защитит меня от случайного указания «make -j16» снова.
Кроме того, "слишком много" ядер не должно быть таким же количеством ядер (включая многопоточное ядро), которое доступно, поскольку потоки +1 или +2 все равно не убьют машину.
Могу ли я использовать ulimits для смягчения проблемы? Я думал об указании установить swap-space на 0. Тогда я должен внести изменения в прерывание, я думаю.