Раніше сьогодні, будуючи щось, я вирішив бігти makeяк
$ make -j
може бути , за звичкою з іншими програмами , такими , як , cabalде по -jзамовчуванням в розумних межах.
Приблизно через 20 секунд весь мій робочий стіл перемелюється . Я шукаю різні ознаки активності. Вболівальники не обертаються. Індикатор жорсткого диска суцільно зелений, але я не чую жодної активності диска. Гммммм. Після 10 хвилин мовчання я нарешті бачу відповідь на перше натискання клавіш, яке я зробив століттями тому, і я також починаю чути надто знайомий звук, що лунає на диску. Через 20 хвилин поволі намагаючись пробратися в термінал на цій невідповідній машині, я заграв і застосував REISUB.
Спочатку я вважав, що винуватець настільного програмного забезпечення для настільних комп'ютерів повинен був бути винуватим, тому що мені давно було встановлено обмеження пам’яті на інтерактивних сесіях bash, щоб не дати мені поставити себе саме в таку ситуацію! Але /var/log/syslogрозповідає іншу історію; ОИЙ вбивця залишив деякі psзвалища , які підозріло упаковані з c++і cc1plusпроцесами!
Ось аналіз частоти одного з цих смітників:
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
Тож я перевіряю сторінку чоловіка на наявність GNU: (наголос додано)
-j [jobs], --jobs [= jobs] Вказує кількість завдань (команд) для виконання одночасно. Якщо є кілька варіантів -j, останній діє. Якщо параметр -j заданий без аргументу, make не обмежує кількість завдань, які можуть працювати одночасно.
Я неохоче бачу, чи можу я відтворити проблему (лікарю, боляче, коли я це роблю ...) , але результати дослідження поки що здаються домашніми: ясна річ, make -jі сотні процесів, що виникають в результаті, повинні мати стали причиною зависання та лущення диска. Однак, шукаючи Інтернет, я не можу знайти багато попередження проти цього. Чи я підхоплюю до висновків?
Настільки make -jнебезпечний, як мені здавалося? Якщо так, то чому на землі він є, і що можна зробити, щоб ідіотом це було?
makeвласні засоби та робіть export MAKEFLAGS="-j 4". Для подальших досліджень я раджу прочитати, перш ніж набрати текст . PS: <кількість ядер> + 2 служить мені добре вже майже два десятиліття. Ще в той час Лінус зробив фінал, make -j128перш ніж випустити ядро.
alias make="make -j4"щоб усунути необхідність додавання-jNаргументів, але я все ще не продумав усі можливі наслідки ...