Що станеться, якщо випадково залиште додаток, що працює, і натисніть «Встановити зараз» у програмі оновлення програм?


22

Оновлення програмного забезпечення update-managerз’являється, наприклад, показує оновлення безпеки для Firefox. Природно, для продовження натискаю "Встановити зараз".

Однак, що станеться, якщо у мене все ще працює Firefox, коли я це роблю? Чи все одно оновиться Firefox? Чи буде оновлення пропущено і знову з’явиться наступного разу? Чи змусить оновлення Firefox закритися і, можливо, вийде з ладу? Чи це лише частково оновить програмне забезпечення і, можливо, зламає мою установку Firefox?


10
Нічого не відбувається, Firefox відкритий у Рамі. Іноді він виявляє оновлення та пропонує перезапустити браузер. Але, можливо, хтось, хто має більше розуміння та посилань, може дати кращу відповідь.
pLumo

3
Я не знаю конкретно про Ubuntu, але в Arch (і я не думаю, що в цьому випадку все так різно), оновлення firefox під його ногами під час запуску, здається, працює, але тоді перше, що ви робите в Firefox, руйнує річ. Я завжди просто відносив це до складного характеру браузерів сучасного часу, які завантажують всі види матеріалів. Але firefox - це єдине, що відбувається зі мною.
tomsmeding

2
Firefox зупинить наступного разу, коли ви відкриєте вкладку, і скаже, що її потрібно перезапустити. Інші програми можуть робити щось інше.
Майкл Хемптон

Відповіді:


40

Ви повинні думати про Windows. Unix зробив це правильно, а потім пізніше Windows придумала і розробила неправильні способи вживання справ.

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

У Unix, коли файл відкривається процесом, той самий файл завжди буде доступний для процесу, навіть якщо вихідний файл видалений з файлової системи .

Після оновлення файлова система буде містити іншу версію файлу, і весь процес, що починається після оновлення, використовуватиме цей новий файл. Але, на відміну від Windows, всі старі процеси Unix продовжуватимуть використовувати початкові файли, з яких вони почалися. Хоча вони більше не доступні через файлову систему, ці файли зберігатимуться до тих пір, поки будь-який процес використовує їх. Зрештою, коли жодні процеси не використовують файли, стара версія файлів нарешті буде видалена.

Ви, звичайно, можете вирішити перезапустити Firefox (або інші процеси), якщо ви хочете отримати переваги оновлення відразу. Вибір за вами.


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Томас Уорд

18

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

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

Між іншим, Chrome уникає цього , використовуючи процес "зиготи", який сидить навколо, нічого не роблячи; коли веб-переглядачу потрібно створити новий процес, замість того, щоб просити ОС знову виконати виконуваний браузер (який би виконував можливо оновлений двійковий код), він просить процес зиготи дублювати себе, і одна з копій потім стає звичайним рендером процес.


1
Крім того, за допомогою такого складного додатка, як Firefox, все, що може знадобитися для вирішення всього, з чим він стикається, не завантажується в пам'ять під час запуску програми. Таким чином, компоненти, які завантажуються за необхідності, можуть аналогічно створювати невідповідність версій. Мені часто доводилося зависнути Firefox, коли його оновлювали під час роботи.
fixer1234

Це не просто браузери з багатопроцесорними моделями, але будь-яка ситуація, коли бібліотеки використовуються для IPC, і бібліотеки можна завантажувати до і після оновлення, хоча браузери, мабуть, є найбільш відомим прикладом цього в наші дні (взаємодія COM на Windows досить поширене означає, що багато інших програм можуть неявно робити щось подібне). Я також не можу уявити, що Chrome повністю уникає цієї проблеми з процесом зиготи - чи дійсно він завантажує кожну бібліотеку, яка може знадобитися в будь-який момент при запуску?
Ву

@Voo запитує "чи дійсно завантажується кожна бібліотека, яка може знадобитися в будь-який момент при запуску?". Я не знаю про цей конкретний приклад, але взагалі це не потрібно. Все, що потрібно, - це забезпечити відкриття кожної можливої ​​бібліотеки, що гарантує, що правильні дані будуть прочитані, якщо вони коли-небудь знадобляться. Відкриття файлу (або десятків файлів) - це тривіальна витрата порівняно з завантаженням всього, що вони містять.
Рей Баттерворт

@Ray Fun факт: dlopen бере лише ім'я файлу, але не дескриптори файлів, так що це може бути не так просто, як ви думали, що це буде (ви можете пограти з / proc, але це, як відомо, відрізняється від * nixes). Але більша проблема полягає в тому, що це усуне більшість випадків використання, коли починається динамічне завантаження.
Во

@Voo, вибачте, я помилково подумав, що цей коментар є у орієнтованій на Unix темі, а не про Windows та dll.
Рей Баттерворт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.