シャットダウン、再起動、または起動時に表示するログをどのように印刷しますか?

シャットダウン、再起動、または起動時に表示するログをどのように印刷しますか?

私たちが知っているように、システムを再起動、シャットダウン、または起動すると、いくつかのメッセージが画面に印刷されます。以下はキャプチャです。

ここに画像の説明を入力してください。

私のシステムはUbuntu 16.04で、上記のログメッセージがsystemdから来ていることを知っています。

私が理解したのは、通常のユーザープロセスでは、システムが3つのファイル記述子(0、1、2)を提供するため、コンテンツを画面に印刷できます。たとえば、次のようになります/proc/<PID>/fd/

root@X86-Xenial-6:~# ls /proc/3467/fd
0  1  2  255

これは3467hello-worldプログラムです。それが何であるかはわかりませんが、標準入力、標準出力、および標準エラーであることはわかっています225012

だから質問があります。システムのシャットダウン、再起動、または起動時にユーザープロセスがまだ作成されていないか破壊されました。つまり、/proc/この場合、もはや存在せず、存在し0ないという意味です。12

それでは、なぜsystemdからのメッセージが画面に印刷されるのですか?カーネルは画面を即座に制御するので、内容を印刷できますが、systemdはカーネルに属していませんが、どのように画面に内容を印刷できますか?どの機能やAPIが使用されますか?

ベストアンサー1

開始と終了は、カーネルではなく主にユーザー空間で行われます。カーネルの初期化が完了したら、initコンソールを指す標準ファイル記述子を使用して、通常のプロセスのようにプロセスを見つけて起動します。したがって、init(あなたの場合はinitramfsスクリプトとsystemd)標準出力に書き込むことができ、記録した内容はすべて画面(またはコンソール出力が表示されるように設定されているすべての場所)に表示されます。これは、ユーザースペースが終了した後(そしてすべての終了ログがコンソールに書き込まれた後)、カーネルが終了するか再起動されるまで続きます。

ちなみに、これは/procカーネルが維持する特定の情報にアクセスする方法にすぎないことに注意してください。/procこの情報は、インストールするかどうかに関係なく存在します。

また参考にしてください

私たち全員が知っているように、システムを再起動またはシャットダウンまたは起動すると、いくつかのメッセージが画面に印刷されます。

必ずしも真実である必要はありません。これで、多くのシステムがログを表示せずに起動してシャットダウンするため、「すべてを知っている」とは考えられません。

おすすめ記事