したがって、私はUnix / Linuxのシャットダウンプロセス(非常に制限的であることを認めています)の私の理解に基づいて、ある時点で次のステップが発生すると思います。 1. マウントされたドライブがマウント解除されます。 2. 実行中のドライブにシャットダウン信号が送信されます。これにより、アプリケーションを終了する前にクリーンアップできます。
今どれが最初に起こりますか?それとも#1はまったく起こりませんでしたか?それとも注文は保証されませんか?
私がこの質問をするのは、シャットダウン時に中央設定ファイルをどこにでも配置できる中央設定ファイルにデータを書き込むアプリケーションを開発しているからです。私が懸念しているのは、中央設定ファイルがマウントされたドライブにあり、#1が#2よりも前に発生した場合、中央設定ファイルへの保存されたパスが無効になる可能性があることです。これらの懸念は正当ですか?
ベストアンサー1
これは、初期化システムと構成方法によって異なります。ただし、合理的な構成により、システムソフトウェアはシャットダウン時に実行するフックを登録できます。既存のSystem V initの場合、これはイベントです/etc/rc0.d
。既存のBSD initの場合、これはイベントです/etc/rc.shutdown
。 Upstart の場合、0 または 6 への実行レベル変更イベントです。リストは続くので、すべてのディストリビューションのパッケージを維持することは多くの作業になる可能性があります(ほとんどの作成者はアプリケーションの終了スクリプトを提供し、ディストリビューションメンテナンス担当者は正しい場所に登録されたパッケージを作成し、スクリプトを閉じます。)
すべてのアプリケーション関連スクリプトが実行されると、終了の最後のステップが発生します。一般的には、開いているファイルがまだ存在するファイルシステムを除くすべてのファイルシステムをアンマウントし、残りのすべてのプロセスを終了し、最後に残りのファイルシステム(読み取り専用で再マウントされたルートを除く)をアンマウントし、コンピュータを停止または再開する操作が含まれます。通常、捕捉可能なTERM信号がすべてのプロセスに送信され、数秒後にKILL信号が送信されます。プロセスは反応を試みることができますが、時間は限られており、システムは待機しません。
したがって、アプリケーションがrootとしてインストールされている場合は、終了時間初期化スクリプトを登録するだけです。権限のないユーザーがアプリケーションをインストールした場合、シャットダウンステップ中に操作を実行できるという保証はありません。
何が起こっても、システムのクラッシュや停電を適切に処理する必要があります。シャットダウン中のジョブは、次の開始をより効率的にするジョブに制限する必要があります。