如果我不小心让应用程序运行并在软件更新程序中单击“立即安装”,会发生什么情况?

fin*_*oot 22 updates update-manager apt firefox software-installation

例如,软件更新程序会update-manager弹出并显示 Firefox 的安全更新。当然,我会点击“立即安装”继续。

但是,如果执行此操作时 Firefox 仍在运行,会发生什么情况?它还会更新Firefox吗?是否会跳过更新并在下次再次弹出?更新会强制 Firefox 关闭并可能崩溃吗?它是否只会部分更新软件并可能破坏我的 Firefox 安装?

Ray*_*rth 40

您一定在考虑 Windows。Unix 做对了,然后 Windows 出现并开发了错误的做事方式。

对于 Windows,替换正在运行的进程正在使用的文件可能会严重影响该进程。该过程将引用该文件中的位置并从中获取不正确的信息,通常会导致灾难性的结果。这就是为什么 Windows 更新通常需要重新启动以确保所有进程都使用正确版本的库等。

在 Unix 中,一旦文件被进程打开,即使原始文件已从文件系统中删除,该文件也将始终可供该进程使用。

更新后,文件系统将包含文件的不同版本,更新后启动的所有进程都将使用该新文件。但是,与 Windows 不同的是,所有旧的 Unix 进程将继续使用它们开始时使用的原始文件。即使不再通过文件系统访问,只要有任何进程正在使用这些文件,这些文件就会一直存在。最终,当没有进程正在使用这些文件时,旧版本的文件最终将被删除。

如果您想立即获得更新的好处,您当然可以决定重新启动 Firefox(或其他进程)。这是你的选择。


Ash*_*Ash 18

通常,在程序已经打开的情况下更新程序是没有问题的——正如其他回答者所解释的那样,一个正在运行的进程可以继续运行,即使其可执行文件被删除。

但是,由于 Firefox 的多进程模型,无论如何您可能会在更新后收到重新启动它的提示。这是因为Firefox 会生成新进程来隔离不同的网站,所以如果它在您更新之后但在重新启动 Firefox 之前生成一个新进程,则新进程将是比浏览器其他部分更新的 Firefox 版本。这可能会导致各种问题,因此 Firefox 可能会提示您重新启动它,然后再允许您继续。

顺便说一下,Chrome通过使用一个“zygote”进程来避免这种情况,该进程无所事事。当浏览器需要生成一个新进程时,它不是要求操作系统再次执行浏览器可执行文件(这将执行可能更新的二进制文件),而是要求 zygote 进程复制自己,然后其中一个副本成为普通渲染器过程。