RHEL 7のプロセス管理シリーズ:起動、シャットダウン、およびその他のすべて–パート5

電源ボタンを押してからRHEL 7サーバーのログイン画面が表示されるまでの全体的で簡潔な見直しでこの記事を始めます。

Linux Boot Process

以下に注意してください:

1. 同じ基本原則は他のLinuxディストリビューションにも、おそらく細かい変更はあるかもしれませんが、適用されます。
2. 以下の説明は、ブートプロセスの包括的な説明を表すものではなく、基本原則のみを表しています。

Linuxのブートプロセス

1. POST(電源投入自己診断)が初期化され、ハードウェアのチェックが実行されます。

2. POSTが完了すると、システム制御が最初のステージブートローダーに渡されます。これは、古いシステム(BIOSとMBRを使用する)の場合はハードディスクのブートセクタに、または専用の(U)EFIパーティションに保存されています。

3. 最初のステージブートローダーは、通常はGRUBGRand Unified Boot Loader)であり、これは/boot内にあります。これにより、カーネルと初期RAMベースのファイルシステム(initramfsとも呼ばれる、最終的に実際のルートファイルシステムをマウントするために必要なアクションを実行するプログラムとバイナリファイルが含まれています)が読み込まれます。

4. オペレーティングシステムとカーネルをブートするオプションを選択できるスプラッシュ画面が表示されます。

Boot Menu Screen

5. カーネルはシステムに接続されたハードウェアをセットアップし、ルートファイルシステムがマウントされると、PID 1のプロセスを起動します。これにより、他のプロセスが初期化され、ログインプロンプトが表示されます。

注意: あとで必要な場合は、dmesgコマンドを使用してこのプロセスの詳細を調べ、このシリーズの前の記事で説明したツールを使用して出力をフィルタリングできます。

Login Screen and Process PID

上記の例では、システムの起動中に親プロセス(つまり、それらを起動したプロセス)がsystemd(ほとんどの現代のLinuxディストリビューションで切り替えられているシステムおよびサービスマネージャー)である現在のプロセスのリストを表示するためによく知られたpsコマンドを使用しました。

# ps -o ppid,pid,uname,comm --ppid=1

-oフラグ(–formatの略)は、psの出力を、man psSTANDARD FORMAT SPECIFIERSセクションで指定されたキーワードを使用して必要に応じてカスタマイズされた形式で表示できるようにします。

psの出力をデフォルトのままにする代わりに定義する必要がある別のケースは、重大な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)
Customize ps Command Output

SystemD入門

Linuxの世界でのいくつかの決定のうち、最も論争を引き起こしたのは、主要なLinuxディストリビューションによるsystemdの採用です。Systemdの支持者は、以下の事実を主な利点として挙げています:

関連記事: ‘init’と‘systemd’の背後にあるストーリー

1. Systemdはシステムの起動中により多くの処理を並行して行うことを可能にします(古いSysVinitでは、プロセスを一つずつ起動し、依存関係を確認し、デーモンの起動を待機してからより多くのサービスを開始するため、常に遅くなりがちです)、そして

2. 実行中のシステムで動的なリソース管理として機能します。したがって、サービスは必要なときに起動されます(使用されていない場合はシステムリソースを消費しないように)ブート時に有効な理由なしに起動されることはありません。

3. SysVinitスクリプトとの後方互換性。

Systemdsystemctlユーティリティによって制御されます。もしSysVinitのバックグラウンドから来たならば、おそらく以下については馴染みがあるでしょう:

  1. 古いシステムではserviceツールが使用されており、SysVinitスクリプトを管理するために使用されていました。また
  2. chkconfigユーティリティは、システムサービスの実行レベル情報を更新およびクエリするために使用されました。
  3. シャットダウン、これを使用してシステムを再起動または停止するために何度か使用したことがあるはずです。

次の表は、これらの旧式ツールと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で存在)が与えられたプロセスの実行優先度(ニースとも呼ばれ、-20から19までの範囲で)に応じてシステムリソースを割り当てる機能です。

reniceの基本的な構文は次のとおりです:

# renice [-n] priority [-gpu] identifier

一般的なコマンドでは、最初の引数は使用される優先度値であり、他の引数はプロセスのID(デフォルト設定)を解釈できます。プロセスグループID、ユーザーID、またはユーザー名。

Process Scheduling Priority
通常のユーザー(root以外)は、所有するプロセスのスケジューリング優先度のみを変更でき、ニースレベルを増やすことしかできません(つまり、システムリソースをより少なく使用します)。

必要に応じてプロセスを終了(または通常の実行を中断):SIGTERM=15)またはすぐに(SIGKILL=9)を通じてシグナルを送信することを殺すというより正確な用語。killまたはpkillコマンド

これら2つのツールの違いは、前者が特定のプロセスまたはプロセスグループ全体を終了させるために使用されるのに対し、後者は名前やその他の属性に基づいて同じことを行うことができる点です。

さらに、pkillpgrepとバンドルされており、pkillが使用されると影響を受けるPIDを表示します。たとえば、実行する前に:

# pkill -u gacanepa

一目でgacanepaが所有するPIDを表示することが役立つかもしれません:

# pgrep -l -u gacanepa
Find PIDs of User

デフォルトでは、killpkill はプロセスに 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 

結論

この記事では、boot processの基本を RHEL 7 システムで説明し、一般的なユーティリティと systemd 固有のコマンドを使用してプロセスを管理するための利用可能なツールを分析しました。

このリストはこのトピックのすべての機能を網羅するものではないことに注意してください。したがって、以下のコメントフォームを使用して、この記事に独自の好みのツールとコマンドを追加してください。質問やその他のコメントも歓迎します。

Source:
https://www.tecmint.com/rhcsa-exam-boot-process-and-process-management/