Что произойдет, если я случайно оставлю приложение запущенным и нажму «Установить сейчас» в Software Updater?

22

update-managerОбновление программного обеспечения появляется и показывает обновления безопасности для Firefox, например. Естественно, я нажму «Установить сейчас», чтобы продолжить.

Тем не менее, что произойдет, если у меня все еще будет запущен Firefox? Будет ли он обновлять Firefox? Будет ли обновление пропущено и просто всплывет в следующий раз, снова? Будет ли обновление принудительно закрывать Firefox и, возможно, вылетать? Будет ли оно только частично обновлять программное обеспечение и, возможно, сломать мою установку Firefox?

finefoot
источник
10
Ничего не происходит, Firefox открыт в Ram. Иногда он обнаруживает обновление и просит перезапустить браузер. Но, возможно, кто-то с большим пониманием и ссылками может дать лучший ответ.
pLumo
3
Я не знаю конкретно об Ubuntu, но в Arch (и я не думаю, что в этом случае все обстоит иначе) обновление firefox под ногами во время работы кажется работающим, но затем первое, что вы делаете в firefox, вылетает вещь. Я всегда просто приписывал это сложной природе современных браузеров, загружающей все виды вещей во время выполнения. Но Firefox - единственное, что происходит со мной.
Томсминг
2
Firefox остановится в следующий раз, когда вы откроете вкладку, и скажет вам, что он должен перезагрузиться. Другие приложения могут делать что-то другое.
Майкл Хэмптон

Ответы:

40

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

В Windows замена файла, который используется запущенным процессом, может плохо повлиять на этот процесс. Процесс будет ссылаться на местоположения в этом файле и получать из него неверную информацию, обычно с катастрофическими результатами. Вот почему обновление Windows обычно требует перезагрузки, чтобы гарантировать, что все процессы используют правильные версии библиотек и т. Д.

В Unix, когда файл был открыт процессом, этот файл всегда будет доступен для процесса, даже если исходный файл будет удален из файловой системы .

После обновления файловая система будет содержать другую версию файла, и все процессы, которые запускаются после обновления, будут использовать этот новый файл. Но, в отличие от Windows, все старые процессы Unix будут продолжать использовать исходные файлы, с которых они начали. Даже если они больше не доступны через файловую систему, эти файлы будут сохраняться до тех пор, пока их использует любой процесс. В конце концов, когда файлы не используются никакими процессами, старая версия файлов будет окончательно удалена.

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

Рэй Баттерворт
источник
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Томас Уорд
18

Как правило, обновление программы, пока она уже открыта, не является проблемой - как объяснили другие авторы, запущенный процесс может продолжаться, даже если его исполняемый файл удален.

Тем не менее, из-за многопроцессной модели Firefox, вы можете получить приглашение перезапустить его после обновления в любом случае. Это связано с тем, что Firefox порождает новые процессы для изоляции разных веб-сайтов, поэтому, если он порождает новый процесс после того, как вы обновили его, но до перезапуска Firefox, новый процесс будет более новой версией Firefox, чем остальная часть браузера. Это может вызвать различные проблемы, поэтому Firefox может попросить вас перезапустить его, прежде чем продолжить.

Кстати, Chrome избегает этого , используя процесс «зиготы», который бездействует; когда браузеру нужно запустить новый процесс, вместо того, чтобы просить ОС снова выполнить исполняемый файл браузера (который будет выполнять возможно обновленный двоичный файл), он просит процесс zygote дублировать себя, и одна из копий затем становится обычным средством визуализации. процесс.

мистифицировать
источник
1
Кроме того, в таком сложном приложении, как Firefox, все, что может понадобиться для решения всего, с чем он сталкивается, не загружается в память при запуске программы. Поэтому компоненты, которые загружаются по мере необходимости, могут аналогичным образом создавать несоответствие версий. Я часто зависал при обновлении Firefox во время его работы.
fixer1234
Это не просто браузеры с многопроцессорными моделями, но любая ситуация, когда библиотеки используются для IPC, и библиотеки могут быть загружены до и после обновления - хотя браузеры, вероятно, являются наиболее известным примером этого в наши дни (COM-взаимодействие в Windows довольно распространенный означает, что многие другие программы могут неявно делать что-то вроде этого). Я также не могу себе представить, что Chrome полностью избегает этой проблемы с процессом zygote - действительно ли он загружает каждую библиотеку, которая может понадобиться в любой момент при запуске?
Во
@Voo спрашивает: «Действительно ли она загружает каждую библиотеку, которая может понадобиться в любой момент при запуске?». Я не знаю об этом конкретном примере, но в целом это не обязательно. Все, что требуется, - это обеспечить, чтобы каждая возможная библиотека открывалась при запуске, тем самым гарантируя, что правильные данные будут прочитаны в случае необходимости. Открытие файла (или десятков файлов) является тривиальным расходом по сравнению с загрузкой всего, что в нем содержится.
Рэй Баттерворт
@Ray Fun факт: dlopen берет только имя файла, но не дескрипторы файлов, так что это может быть не так просто, как вы думали (вы можете поиграть с / proc, но это общеизвестно по * nixes). Но большая проблема заключается в том, что это исключит большинство случаев использования, где динамическая загрузка используется для начала.
Во
@ Voo, извините, я ошибочно думал, что этот комментарий был в Unix-ориентированной ветке, а не о Windows и DLL.
Рэй Баттерворт