。
Linuxにinit
と入力します。 /sbin/init
の目的は、システムV init、upstartまたはsystemdであり、これらのプロセスのすべてを正確に起動しています。これらのinitユーティリティには、それらの下で実行するサービスを管理する機能があります。
さて、Linuxシステムはまた、すなわち、ランレベルの概念を持っています
0 = shutdown
1 = single user recovery mode, no networking
2 = ?
3 = multi user networking no X
4 = ?
5 = multi user networking X
? 1つは厳密に定義されていません。とにかくrootにsuを入力して今すぐinit 3
と入力すると、Linuxを使用していると仮定すると、Xとすべてのクライアントが終了します。もちろん、特定のランレベルで何かが許可されていると、それは強制終了されませんが、特定のプロセスがリブートするだけの場合は、これは非常にうまくいきます。システムデーモンを再起動するためのユースケースは、アップデートに対応しており、最近ほとんどのパッケージマネージャは、あなたのinitscriptツールを使ってこれを実際に実行します。
GUI全体を再起動できるので、すべてのデーモンを再起動できます。私たちは他のプロセスも殺すことができます。ハードウェアドライバのリロード?私はすでにmodprobe
経由でそれを行うことができます。そのため、グラフィックスドライバの更新を飾るならば、私はinit 3
を削除し、古いものを削除し、新しいものを挿入して持ち運びます。
あなたのパッケージマネージャーはシステムデーモンを再起動する方法を知っています。あなたはいつでもログアウトして元に戻すことができます。したがって、Linuxは既にアップデートの再起動を避けるという点でかなり効率的です。カーネル
を「再起動」
だから基本的に、私は、Linuxのほとんどは、実際に再起動せずに「再起動」することができると思いたいです。今は何が残っていますか?
- カーネルを再ロードできません。
- 私は簡単にルートファイルシステムをアンマウントできません。私はその新たに読み込まれたユーザー空間に頼っています。免責事項:カーネルの "reload"中にinitramfsをリロードするだけでいいので、ここでは1に依存しています。
ここで、どのようにカーネルをリロードするのですか?まあカーネルは実際に特別な魔法ではありません。メモリにコピーされた別のコンピュータプログラムなので、カーネルを書き込んで実行に渡すことができます。
これは、そうでないと、kexec
と呼ばれます。私はそれで問題を要約するwikipedia pageを残しておきます:
ながら実現可能な、kexecを、2つの大きな課題提起などのメカニズムを実装:
- は、新しいカーネルが現在実行中のメモリを上書きされます1つはまだ実行中です
- 新しいカーネルでは、通常、すべての物理デバイスがシステムの再起動後、BIOS(またはファームウェア)が「正常」状態にリセットされたときと同様に、 )。実際の再起動をバイパスすると、デバイスは未知の状態になる可能性があり、新しいカーネルはそれを回復する必要があります。
kexecでは、システムシャットダウンとは異なり、自動的にファイルシステムやプロセスを停止します。あなたはそれを担当しています。
あなたはそれを持っています。リロードする必要がある部分に応じて、Linux上ではほとんどが可能です。
SU q/aは実際に私にそれに関する情報をたくさん与えてくれました。その点では大丈夫です。 –