是什么让 Windows 需要不断重启而 Linux 不需要?

Ben*_*ist 22 operating-systems

和很多人一样,我在我的电脑上运行双系统。重要的更新需要在 Windows 上不断重新启动,而我认为这在 Linux 上从未发生在我身上。每个操作系统的哪些属性决定了这是否可行?

Mas*_*ler 50

这是工程决策的结果。

在 Linux 系统上,可以删除仍在使用的文件;文件系统使用本质上是引用计数的一种形式,打开文件只是对它的另一个引用。当您关闭它时,文件将被清理。因此,可以替换核心操作系统代码和数据文件,而无需关闭它们并重新启动它们(也称为重启)。

在 Windows 上,打开文件会将其锁定在文件系统中,并且无法删除。这意味着当前运行的代码不能在不重新启动的情况下更新。但这也意味着您始终可以确切地知道系统上正在运行的版本;在 Linux 模式下,可能会收到一个重要的系统软件更新,成功应用它,但仍然无法在您的系统上运行,因为旧的、未更新的版本仍在运行。

这是一种工程权衡,就像计算中的大多数事情一样。

  • @Ian 不,您可以重新启动服务以应用更新。或者,在内核的情况下,可以使用 ksplice、kpatch 等,或者 Linux 4.0 中的新特性。 (6认同)
  • @Deduplicator,当然;我只是对采用率感到悲观。我与之合作的一个开发团队宣布,在足够古老的 systemd 版本的基于通知套接字的看门狗支持中的一个错误导致他们的守护进程的新副本之后,他们将不再接受任何添加对可选 systemd 功能的支持的补丁每秒旋转一次(除了旧的!)。 (2认同)
  • @CharlesDuffy 我不知道它是如何工作的,但是 Debian [needrestart](https://packages.debian.org/sid/needrestart) 包可以完成您所描述的工作,即自动重启其可执行文件/库刚刚更新。 (2认同)