web-dev-qa-db-ja.com

シャットダウン時に、シャットダウン信号を処理する前にドライブのアンマウントが発生しますか?

したがって、Unix/Linuxのシャットダウンプロセス(私が認める非常に制限されている)の理解に基づいて、ある時点でこれらの手順が発生すると思います:1。マウントされたドライブがマウント解除されます2.終了信号が実行中のアプリケーションに送信されます。終了する前にクリーンアップを行うアプリケーション

さて、どちらが最初に起こりますか?それとも#1はまったく起こりませんか?または、注文は保証されていませんか?

この質問をする理由は、シャットダウン時に中央構成ファイルにデータを書き込んでいるアプリケーションで作業しているためです。中央構成ファイルはどこにでも配置できます。私の懸念は、中央構成ファイルがマウントされたドライブ上にあり、#1が#2の前に発生した場合、中央構成ファイル用に保存されたパスが無効になる可能性があることです。この懸念は理にかなっていますか?

1

これは、initシステムとその構成方法によって異なります。ただし、適切な構成であれば、システムソフトウェアはシャットダウン時に実行するフックを登録できます。従来のSystemV initでは、それは/etc/rc0.dのファイルです。従来のBSDinitでは、それは/etc/rc.shutdownのコードです。 Upstartでは、これは0または6へのランレベル変更イベントです。リストは続きます。そのため、すべてのディストリビューションのパッケージを維持するのに多くの作業が必要になる可能性があります(ほとんどの作成者は、アプリケーションのシャットダウンスクリプトを提供し、ディストリビューションメンテナは、シャットダウンスクリプトを適切な場所に登録するパッケージを作成します)。

すべてのアプリケーション固有のスクリプトが実行されると、シャットダウンの最終フェーズが実行されます。通常、これには、開いているファイルが残っているファイルシステムを除くすべてのファイルシステムをアンマウントし、残りのすべてのプロセスを強制終了し、最後に残りのファイルシステム(読み取り専用で再マウントされるルートを除く)をアンマウントし、コンピューターを停止または再起動することが含まれます。すべてのプロセスにキャッチ可能なTERMシグナルを送信し、数秒後にKILLシグナルを送信するのが一般的です。プロセスは反応を試みることができますが、時間は限られており、システムは待機しません。

したがって、アプリケーションがrootとしてインストールされている場合は、シャットダウン時のinitスクリプトを登録するだけです。アプリケーションが非特権ユーザーによってインストールされている場合、シャットダウンフェーズ中に何でもできるという保証はありません。

とにかく、システムクラッシュや電源障害を適切に処理する必要があることに注意してください。シャットダウン時のアクションは、次の起動をより効率的にするものに限定する必要があります。絶対に実行する必要のあることは何もありません。