一部のアップデートでのみ再起動が必要なのはなぜですか?


18

Ubuntuがさらに更新するときに再起動する必要がないのはなぜですか?カーネルの更新やビデオドライバーなどの場合、再起動しないと変更をロードできないことを知っています。しかし、私はしばしば再起動を必要としない非常に基本的なパッケージのより基本的な更新について興味があります。Telepathy、glibc、gtkなどのようなもの。なぜこのようなパッケージは更新するために再起動を必要としないのですか?更新直後に新しいバージョンは実際に実行されていますか?

別の例はGwibberです。最近、gwibberの実行中にUpdate Managerを介してgwibberを受け取って更新しました。更新は正常に完了しました。gwibberは手動で再起動せずに新しいバージョンを実行しますか?それは他のパッケージでも同じですか?(mysqlやapacheのようなものは更新時に自動的に再起動します)。自動的に再起動しないパッケージの場合、それはセキュリティ修正のセキュリティ上の問題ではありませんか?

これは、私がOS Xを約1週間実行しており、カーネル/ビデオドライバーに関連していない場合でも、ほとんどすべての更新プログラムを再起動する必要があるためです(私が知る限り-多くの情報を提供していません) )。私の友人は、「万が一に備えて」ほとんどのアップデートでAppleが強制的に再起動するのだと言いました。ほとんどのインストール/アンインストールまたは更新には再起動が必要であるため、Windowsは最悪です(多くの場合、シャットダウンには非常に長い時間がかかります)。これはこの会場では少し広いかもしれませんが、異なるオペレーティングシステムがこれをどう違うように処理するのですか?または、Ubuntuに固有:なぜUbuntuはより厳格な再起動ポリシーに従っていないのですか?

回答:


23

Windowsでファイルを開いたり実行したりするたびに、Windowsはファイルを所定の位置にロックします(これは単純化ですが、通常は正しいです)。それ。これが、Windowsがそれ自体を更新しなければならないときはいつでも、それを有効にするために再起動が必要な理由です。Windowsは、次回の起動時(何もロックされていないとき)にファイルの置換および削除のアクティビティをキューに入れます。

一方、Linuxには、ロックされているファイルではなく、ディスク上の基本データであるメカニズムがあります。これは些細な違いに思えるかもしれませんが、ファイルシステムの目次のファイルのレコードは、すでにファイルを開いているプログラムを邪魔することなく削除できることを意味します。そのため、実行中または使用中のファイルを削除できます。ファイルテーブルのエントリがなくなっても、何らかのプロセスがそのハンドルを開いている限り、ディスク上に存在し続けます。これにより、Linuxは実行中のプログラムを完全に置き換え、プログラムを再起動するか、プロセスが自然に終了するのを待つことができます。古いインスタンスが削除されると、

そのため、特定のファイルが何らかの方法(たとえば、カーネルイメージファイルまたは同様に低レベルのシステムに属するファイル)である限り、アップデーターは通常、このようにインプレース更新できます。これは良いアイデアではない特別なケースや状況があると確信していますが、ほとんどの場合は問題ありません。

OS Xがそれを行う理由については、その「念のため」理論はもっともらしいように思えます。


1
:びっくりのポイントを証明するために、test.pyファイルを作成#!/usr/bin/env python print raw_input()し、これを実行するpython test.pychmod +x test.py && ./test.py、それは入力を求めるとき、およびrm test.py
raylu

ほとんどのユーザープログラムが自動再起動されない理由は、それらが非常に短い寿命であり、システムを変更する権限がないと考えられているためです。心配な場合は、ログアウトしてから再度ログインするだけで済みます。これにより、開いているすべてのプログラムが閉じられます。
ラッセポールセン

2
特に、dpkgはファイルをfoo.dpkg-newに書き込み、そこにあった以前のファイルの名前を変更することでインストールします。これにより、ライブラリと実行可能ファイルのインプレースアップグレードがスムーズになります。
コリンワトソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.