INIT = / bin / shカーネルパラメータで起動した直後にシェルをシャットダウンすると、システムは完全にアイドルですか?

INIT = / bin / shカーネルパラメータで起動した直後にシェルをシャットダウンすると、システムは完全にアイドルですか?

次のように始めたらどうなりますか?

GRUB コマンドラインまたは同様のコマンドを介してカーネルに引数を渡し、シェルがロードされるとINIT=/bin/sh(or /bin/bash)開始
します。これにより、コンピュータはどのキーを押しても応答しなくなります。

気になる状態現在のシステム。私が知っている限り、これはinitカーネルがロードされた後に実行される最初のプロセスであり、他のプロセスはここで実行さfork/bin/shますinit。します。

走るほどアイドル状態ですか?

while (1) {
    sleep(1);
}

それとも何ですか?

皆様のご提案ありがとうございます。たぶん、より多くの情報が役に立つでしょう。私はこれが不要だと思いました。

私は最近CentOS 7.2サーバーで作業していましたが、XFSディスクパーティションの1つが機能し、システムの起動時に確認して回復するのに無限の時間がかかりました。/etc/fstabこのパーティションの自動マウントをオフにするように編集する予定です。通常の起動プロセスが中断されたため、init=/bin/bashシステムをbashで起動したことがあります。編集後に誤ってシェルを実行しましたがfstabexitこれにより、画面がどのキーを押してもCtrl-Alt-Del反応しなくなります(含む)。(その部屋がうるさいので、CPUが一生懸命働いているかどうかはわかりませんでした)。この現象は私が最初に書いた質問について考えさせました。

今夜、私はDebian 8がインストールされている私のラップトップでいくつかのテストを行いました。カーネルパニックが明らか

答え1

驚きました。私の理解はPID 1を終了することですカーネルパニック発生。そこで何が起こったのか教えてくれます。

パニック動作は設定可能です。到達するデフォルトオプションを使用すると、リングあなたが言ったのとまったく同じです。

使用される遅延関数は次のとおりです。録音された「忙しい待機」で。これはいいえ通常、アイドル状態のときにオペレーティングシステムによって使用されるスリープCPUスリープ状態に入ることが予想されます。

パニックプリントのバックトレースを見ると、これがすべて起こることがわかりますsys_exit()。技術的には、PID 1は破損せず、システムコールから決して返されません。まず、別のCPUを停止してください。

(ということがあります。「アイドルスレッド開始」。私はそれがそのプロセスに関与しているとは思わない。 AFAICT あなたはこのスレッドを見ることができないでしょう。これをアイドルスレッドとして理解するには、他のCPUがオンラインになったときにアイドルスレッドを提供するものが何であるかを尋ねる必要があります。

答え2

ユーザーレベルのプロセスが実行されていない場合、システムが何もしないことは事実ではありません。システムにはいくつかあります。カーネルスレッド、カーネル自体が起動しました。彼らはほとんどの時間眠りますが、タスクを実行するために定期的に目覚めます。カーネルスレッドはカーネル空間コードのみを実行します。つまり、ユーザーレベルのメモリマッピングはありません。独立して予約され、一意のプロセスIDを持つため、独立したプロセスです。

を実行している場合は、ps auxスレッド名の周囲の角カッコでカーネルスレッドを識別できます。

答え3

システムに実行中のプロセスがありません。したがって、あなたが書いたような忙しいループはありません(100%CPU使用率)。割り込みはまだカーネルによって処理できますが、プロセスでは処理できません。 CPUはアイドル状態になります。

詳細はこちらからご覧いただけます。kernel_init() ソース、プログラムの実行はに似ていますexecve()。これは実行が返されないことを意味します(参考資料を参照execve(3p))。

関連情報