为什么仅在某些更新上需要重新启动?


18

为什么Ubuntu不要求重启更多更新?我知道对于内核更新和诸如视频驱动程序之类的东西,如果不重新启动就无法加载更改。但是我很好奇一些基本的软件包的更基本的更新,这些更新通常不需要重启。诸如Telepathy,glibc,gtk之类的东西。为什么这样的软件包不需要重启才能更新?新版本是否在更新后立即运行?

另一个示例是Gwibber。我最近在运行gwibber时通过更新管理器收到了gwibber并进行了更新。更新成功完成。gwibber是否可以在不手动重启的情况下运行新版本?其他软件包也一样吗?(我知道一些类似mysql和apache的更新会自动重启)。对于不会自动重新启动的软件包,这对于安全修补程序来说不是一个安全问题吗?

这是因为我已经在OS X上运行了大约一周的时间,并且几乎每个更新都需要重新启动,即使它与内核/视频驱动程序无关(据我所知-它们没有为您提供很多信息) )。我的一个朋友说,苹果公司强制大多数更新重新启动,以防万一您不重新启动就很奇怪。Windows是最糟糕的,因为几乎所有安装/卸载或更新都需要重新启动(通常迫使关机需要长时间)。对于这个场所来说,这可能有点宽泛,但是为什么不同的操作系统对它的处理方式如此不同?或者,更特定于Ubuntu:为什么Ubuntu不遵循更严格的重启策略?

Answers:


23

每当您在Windows中打开或执行文件时,Windows都会将文件锁定在适当的位置(这是一种简化,但通常是这样。)您可能会遇到那些烦人的错误,您无法删除文件,因为另一个进程具有独占锁定它。这就是Windows每次必须更新自身时都需要重新启动才能生效的原因。Windows将在下次启动时(当没有任何东西锁定时)将文件替换和删除活动排队。

另一方面,Linux具有一种机制,其中锁定的不是文件,而是磁盘上的基础数据。这看起来似乎是微不足道的区别,但这意味着可以删除文件系统目录中文件的记录,而不会干扰已经打开文件的任何程序。因此,您可以在文件仍在执行或以其他方式使用时删除它,并且只要某个进程具有打开的句柄,即使文件表中的条目消失了,它也将继续存在于磁盘上。这样,Linux可以在程序仍在运行时完全替换它,然后只需重新启动该程序或等待进程自然退出即可。一旦旧实例被杀死,

因此,只要特定文件在某种程度上不是特殊的(例如,内核映像文件或属于类似底层系统的文件),更新程序通常都可以像这样进行就地更新。我敢肯定,在某些特殊情况下,这不是一个好主意,但在大多数情况下都可以。

至于为什么OS X这样做,“以防万一”的理论听起来似乎是合理的。


1
为了说明Amazed的观点,请创建一个test.py文件:#!/usr/bin/env python print raw_input()使用python test.pychmod +x test.py && ./test.py和在提示您输入时运行rm test.py
raylu 2011年

大多数用户程序无法自动重启的原因是,它们被认为寿命很短,并且几乎没有更改系统的权限。如果您担心只能退出然后再登录,则会关闭所有打开的程序。
LassePoulsen 2011年

2
尤其是,dpkg通过将文件写入foo.dpkg-new来安装文件,然后将其重命名为先前存在的任何先前文件的顶部,从而可以平滑地就地升级库和可执行文件。
科林·沃森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.