RHCSA シリーズ: RHEL 7 のプロセス管理: ブート、シャットダウン、およびその間のすべて – パート 5
この記事では、電源ボタンを押してRHEL 7サーバーの電源を入れた瞬間からログインが表示されるまでの全体的な概要を簡単に説明します。コマンドラインインターフェースの画面。
その点に注意してください:
1. 同じ基本原則が、多少の変更を加えて他の Linux ディストリビューションにも適用されます。
2. 以下の説明は、ブート プロセスを網羅的に説明することを目的としたものではなく、基本的な説明のみを目的としています。
Linux ブートプロセス
1. POST (電源投入時自己テスト) は初期化してハードウェア チェックを実行します。
2. POST が完了すると、システム制御が第 1 段階のブート ローダーに渡され、ブート ローダーはいずれかのハードディスク (古いディスクの場合) のブート セクタに保存されます。 BIOS および MBR を使用するシステム)、または専用の (U)EFI パーティション。
3. 次に、第 1 段階のブート ローダーが第 2 段階のブート ローダーをロードします。通常は GRUB (GRand Unified Boot Loader) であり、< 内にあります。 Strong>/boot は、カーネルと初期 RAM ベースのファイル システム (initramfs とも呼ばれます) をロードします。これには、最終的に必要なアクションを実行するプログラムとバイナリ ファイルが含まれます。実際のルート ファイルシステムをマウントします)。
4. 起動するオペレーティング システムとカーネルを選択できるスプラッシュ画面が表示されます。
5. カーネルはシステムに接続されているハードウェアをセットアップし、ルート ファイルシステムがマウントされると、PID 1 でプロセスを起動します。これにより、他のプロセスが初期化されて表示されます。ログインプロンプトを表示します。
注: 後で確認したい場合は、dmesg コマンドを使用してこのプロセスの詳細を調べ、ツールを使用して出力をフィルタリングできます。このシリーズの以前の記事で説明しました。
上の例では、よく知られたps コマンドを使用して、親プロセス (つまり、それらを開始したプロセス) が systemd である現在のプロセスのリストを表示しました。 > (最新の Linux ディストリビューションが切り替えているシステムおよびサービス マネージャー) システムの起動中:
ps -o ppid,pid,uname,comm --ppid=1
-o フラグ (–format の略) を使用すると、ps の出力をニーズに合わせてカスタマイズした形式で表示できます。 man ps の STANDARD FORMAT SPECIFIERS セクションで指定されたキーワード。
デフォルトを使用する代わりに ps の出力を定義する必要があるもう 1 つのケースは、重大な CPU やメモリの負荷を引き起こしているプロセスを見つけて、それに応じて並べ替える必要がある場合です。
ps aux --sort=+pcpu # Sort by %CPU (ascending)
ps aux --sort=-pcpu # Sort by %CPU (descending)
ps aux --sort=+pmem # Sort by %MEM (ascending)
ps aux --sort=-pmem # Sort by %MEM (descending)
ps aux --sort=+pcpu,-pmem # Combine sort by %CPU (ascending) and %MEM (descending)
SystemD の概要
Linux の世界では、 主要な Linux ディストリビューションによるsystemdの採用ほど多くの論争を引き起こした決定はほとんどありません。 Systemd の支持者は、その主な利点として次の事実を挙げています。
こちらもお読みください: 「init」と「systemd」の背後にある物語
1. Systemd では、システム起動時により多くの処理を並行して実行できます (古い SysVinit とは対照的に、プロセスを 1 つずつ開始するため常に遅くなる傾向があり、チェックが行われます)あるサービスが別のサービスに依存し、さらに多くのサービスを開始できるようにデーモンが起動するのを待つ場合)、および
2. 実行中のシステムでの動的なリソース管理として機能します。したがって、サービスは、ブート中に正当な理由なく起動されるのではなく、必要なときに (使用されていない場合にシステム リソースの消費を避けるために) 開始されます。
3. SysVinit スクリプトとの下位互換性。
Systemd は、systemctl ユーティリティによって制御されます。 SysVinit のバックグラウンドを持っている場合は、次のことに精通している可能性があります。
- サービス ツール (これらの古いシステムでは) SysVinit スクリプトの管理に使用されていました。
- chkconfig ユーティリティは、システム サービスのランレベル情報を更新およびクエリする目的を果たしました。
- シャットダウン。実行中のシステムを再起動または停止するために何度か使用したはずです。
次の表は、これらの従来のツールと systemctl の使用の類似点を示しています。
Legacy tool | Systemctl equivalent | Description |
service name start | systemctl start name | Start name (where name is a service) |
service name stop | systemctl stop name | Stop name |
service name condrestart | systemctl try-restart name | Restarts name (if it’s already running) |
service name restart | systemctl restart name | Restarts name |
service name reload | systemctl reload name | Reloads the configuration for name |
service name status | systemctl status name | Displays the current status of name |
service –status-all | systemctl | Displays the status of all current services |
chkconfig name on | systemctl enable name | Enable name to run on startup as specified in the unit file (the file to which the symlink points). The process of enabling or disabling a service to start automatically on boot consists in adding or removing symbolic links inside the /etc/systemd/system directory. |
chkconfig name off | systemctl disable name | Disables name to run on startup as specified in the unit file (the file to which the symlink points) |
chkconfig –list name | systemctl is-enabled name | Verify whether name (a specific service) is currently enabled |
chkconfig –list | systemctl –type=service | Displays all services and tells whether they are enabled or disabled |
shutdown -h now | systemctl poweroff | Power-off the machine (halt) |
shutdown -r now | systemctl reboot | Reboot the system |
Systemd では、ユニット (サービス、マウント ポイント、デバイス、またはネットワーク ソケットのいずれか) とターゲット (systemd が複数の関連プロセスを同時に開始する方法) の概念も導入しました。これは、同じではありませんが、SysVinit ベースのシステムのランレベルと同等であると考えることができます。
まとめ
プロセス管理に関連するその他のタスクには、次の機能が含まれますが、これに限定されるわけではありません。
1. プロセスのシステム リソースの使用に関する限り、実行優先度を調整します。
これは、1 つ以上の実行中のプロセスのスケジュール優先度を変更するrenice ユーティリティによって実現されます。簡単に言えば、スケジューリング優先度は、カーネル (バージョン => 2.6 に存在) が、割り当てられた実行優先度 (別名、niceness、 からの範囲) に従ってシステム リソースを割り当てることを可能にする機能です。特定のプロセスの -20 ~ 19)。
renice の基本的な構文は次のとおりです。
renice [-n] priority [-gpu] identifier
上記の一般的なコマンドでは、最初の引数は使用される優先度の値ですが、他の引数はプロセスID (デフォルト設定)、プロセス グループ ID、ユーザー ID、またはプロセスとして解釈できます。ユーザー名。通常のユーザー (root 以外) は、自分が所有するプロセスのスケジューリング優先度を変更することと、niceness レベルを上げることしかできません (つまり、使用するシステム リソースが少なくなります)。
2. 必要に応じてプロセスを強制終了します (または通常の実行を中断します)。
より正確に言うと、プロセスを強制終了すると、プロセスの実行を正常に終了する (SIGTERM=15) か、kill または pkill によって即座に (SIGKILL=9) 終了するシグナルを送信することができます。コマンド。
これら 2 つのツールの違いは、前者は特定のプロセスまたはプロセス グループを完全に終了するために使用されるのに対し、後者は名前やその他の属性に基づいて同じことを実行できることです。
さらに、pkill には pgrep がバンドルされており、pkill を使用した場合に影響を受ける PID が表示されます。たとえば、実行前に次のようにします。
pkill -u gacanepa
gacanepa が所有するPIDを一目で確認すると便利です。
pgrep -l -u gacanepa
デフォルトでは、kill と pkill の両方がプロセスにSIGTERM シグナルを送信します。上で述べたように、このシグナルは (プロセスが実行を終了している間、または永久に) 無視できるため、正当な理由で実行中のプロセスを真剣に停止する必要がある場合は、SIGKILL を指定する必要があります。 > コマンドラインでシグナル:
kill -9 identifier # Kill a process or a process group
kill -s SIGNAL identifier # Idem
pkill -s SIGNAL identifier # Kill a process by name or other attributes
結論
この記事では、RHEL 7 システムのブート プロセスの基本を説明し、一般的なユーティリティを使用したプロセスの管理に役立ついくつかのツールを分析しました。 systemd 固有のコマンドも含まれます。
このリストは、このトピックの付加機能をすべて網羅することを目的としたものではないため、以下のコメント フォームを使用して、お好みのツールやコマンドをこの記事に自由に追加してください。質問やその他のコメントも歓迎です。