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


この記事は、電源ボタンを押してRHEL 7サーバーの電源を入れてから、コマンドラインインターフェイスにログイン画面が表示されるまでの全体的かつ簡単な改訂から始めます。

その点に注意してください:

2.以下の説明は、ブートプロセスの完全な説明を表すことを意図したものではなく、基本的なことのみを表すものです。

Linuxブートプロセス

1. POST(電源投入時自己診断)は、ハードウェアチェックを初期化して実行します。

2. POSTが終了すると、システム制御は第1ステージのブートローダーに渡されます。このローダーは、ハードディスクの1つのブートセクター(BIOSおよびMBRを使用する古いシステムの場合)または専用(U)EFIのいずれかに格納されます。パーティション。

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

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

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

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

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

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

-oフラグ(-formatの略)を使用すると、manpsのSTANDARDFORMAT SPECIFIERSセクションで指定されたキーワードを使用して、ニーズに合わせてカスタマイズされた形式でpsの出力を表示できることに注意してください。

デフォルトを使用する代わりに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)

SystemDの紹介

Linuxの世界では、主要なLinuxディストリビューションによるsystemdの採用よりも多くの論争を引き起こしている決定はほとんどありません。 Systemdの支持者は、その主な利点として次の事実を挙げています。

また読む:「init」と「systemd」の背後にあるストーリー

1. Systemdを使用すると、システムの起動時に並行してより多くの処理を実行できます(古いSysVinitは、プロセスを1つずつ開始し、他のプロセスに依存しているかどうかを確認してから、デーモンが起動するのを待つため、常に遅くなる傾向があります。より多くのサービスを開始できます)、および

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

3.SysVinitスクリプトとの下位互換性。

Systemdはsystemctlユーティリティによって制御されます。 SysVinitのバックグラウンドをお持ちの場合は、次のことに精通している可能性があります。

  1. the service tool, which -in those older systems- was used to manage SysVinit scripts, and
  2. the chkconfig utility, which served the purpose of updating and querying runlevel information for system services.
  3. shutdown, which you must have used several times to either restart or halt a running system.

次の表は、これらのレガシーツールの使用とsystemctlの使用の類似点を示しています。

Systemdは、ユニット(サービス、マウントポイント、デバイス、またはネットワークソケットのいずれか)とターゲット(systemdが複数の関連プロセスを同時に開始する方法であり、次のように考えることができます)の概念も導入しました- SysVinitベースのシステムのランレベルと同等ではありませんが。

まとめ

プロセス管理に関連するその他のタスクには、次の機能が含まれますが、これらに限定されません。

これは、1つ以上の実行中のプロセスのスケジューリング優先度を変更するreniceユーティリティを介して実行されます。簡単に言うと、スケジューリングの優先度は、カーネル(バージョンu003d> 2.6に存在)が特定のプロセスに割り当てられた実行の優先度(-20から19の範囲のniceness)に従ってシステムリソースを割り当てることを可能にする機能です。

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

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

上記の汎用コマンドでは、最初の引数が使用される優先度の値ですが、他の引数はプロセスID(デフォルト設定)、プロセスグループID、ユーザーID、またはユーザー名として解釈できます。通常のユーザー(root以外)は、自分が所有するプロセスのスケジューリング優先度のみを変更でき、適切性レベルを上げるだけです(つまり、使用するシステムリソースが少なくなります)。

より正確に言えば、プロセスを強制終了すると、killコマンドまたはpkillコマンドを使用してプロセスの実行を正常に終了する(SIGTERM u003d 15)か、すぐに終了する(SIGKILL u003d 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固有のコマンドを使用してプロセスを管理するのに役立ついくつかのツールを分析しました。

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