Чому потрібен перезапуск лише в деяких оновленнях?


18

Чому Ubuntu не потрібно перезавантажувати додаткові оновлення? Я знаю, що для оновлень ядра та таких речей, як драйвери відео, він не може завантажити зміни без перезавантаження. Але мені цікаво більш базові оновлення досить фундаментальних пакетів, які часто не потребують перезавантаження. Такі речі, як Telepathy, glibc, gtk тощо. Чому такі пакети не потребують оновлення? Чи працює нова версія насправді після оновлення?

Іншим прикладом може бути Гвібер. Нещодавно я отримував і оновлювався до gwibber через Менеджер оновлень під час роботи gwibber. Оновлення завершено успішно. Чи запустить gwibber нову версію, не перезавантажуючи її вручну? І це те ж саме для інших пакетів? (Я знаю, що такі, як mysql і apache, автоматично перезапускаються при оновленні). Для пакетів, які не перезавантажуються автоматично, чи не може це бути проблема безпеки для виправлення безпеки?

Це з'являється, тому що я працюю OS X близько тижня, і майже кожне оновлення вимагає перезавантаження, навіть якщо це не пов'язане з драйвером ядра / відео (наскільки я можу сказати - вони не дають вам багато інформації ). Мій друг сказав, що Apple змушує перезапустити більшість оновлень "на всякий випадок", це було б дивно, якщо ви не перезапускаєте. Windows є найгіршим, тому що майже будь-яка установка / видалення чи оновлення потребує перезавантаження (часто змушування відключень займає дуже тривалий час). Це може бути трохи широким для цього місця, але чому різні операційні системи обробляють це так по-різному? Або, більш конкретно для Ubuntu: чому Ubuntu не дотримується більш суворої політики перезапуску?

Відповіді:


23

Щоразу, коли ви відкриваєте або виконуєте файл у Windows, Windows блокує файл на місці (це спрощення, але зазвичай це правда.) Можливо, ви стикалися з тими прикрими помилками, коли ви не можете видалити файл, оскільки інший процес має ексклюзивний замок це. Ось чому кожного разу, коли Windows має оновитись, для її вступу в силу потрібна перезавантаження. Windows буде в черзі виконувати заходи щодо заміни та видалення файлів під час наступного завантаження (коли нічого не заблокує.)

З іншого боку, у Linux є механізм, в якому заблокований не файл, а базові дані на диску, який є. Це може здатися тривіальною диференціацією, але це означає, що запис файлу з вмісту файлової системи можна видалити, не порушуючи жодної програми, у якій файл уже відкритий. Таким чином, ви можете видалити файл, поки він все ще виконується або використовується іншим способом, і він буде існувати на диску до тих пір, поки якийсь процес має відкриту ручку для нього, хоча його запис у таблицю файлів відсутній. Це дозволяє Linux повністю замінити програму, поки вона все ще працює, а потім просто перезапустити програму або просто дочекатися завершення процесу природним шляхом. Як тільки старий екземпляр буде вбитий,

Отже, доки певний файл певним чином не є спеціальним (як, наприклад, файл зображення ядра або файли, що належать аналогічно низькорівневим системам), програма оновлення зазвичай може оновлюватись на місці подібним чином. Я впевнений, що існують особливі випадки та ситуації, коли це не було б гарною ідеєю, але для більшості випадків це нормально.

Що стосується того, чому OS X це робить, то теорія «про всяк випадок» звучить правдоподібно.


1
Для того, щоб продемонструвати точку здивованої, створіть файл test.py: #!/usr/bin/env python print raw_input()Запустити з python test.pyабо , chmod +x test.py && ./test.pyі, коли він запросить введення, rm test.py.
raylu

Причина того, що більшість програм користувача не перезапускається автоматично, полягає в тому, що вони вважаються дуже коротким терміном експлуатації та практично не мають прихильності для зміни системи. Якщо ви переживаєте, можете просто вийти з системи, а потім знову ввійти, це закриє всі відкриті вами програми.
LassePoulsen

2
Зокрема, dpkg встановлює файли, записуючи їх у foo.dpkg-new, а потім перейменуючи їх у верхній частині будь-якого попереднього файлу, який там був, що дозволяє плавно модернізувати бібліотеки та виконавчі файли.
Колін Уотсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.