Linux基礎コース(パート1)1/9
プロセス管理 ー 1
こちらの記事では、psコマンドによるプロセス管理について解説します。
プロセスとは
プロセスとは、メモリ上にある実行中のひとつひとつのプログラムのことです。
Linuxのみならず、コンピュータのOS上では多くのプロセスが動いています。
当然のことながら、プロセスはコンピュータリソースを消費しています。ここでいうコンピュータリソースとは、CPUやメモリなどを指します。
限られたリソースをどのように配分するのかは非常に重要なことなのです。
そこで、プロセス管理が必要となります。
プロセスの状態
プロセスには、さまざまな”状態”があります。
| 状態 | 説明 | 
|---|---|
| 生成(開始) | 新たにプロセスが生成された状態 | 
| 実行可能 | CPUが割り当てられるのを待っている状態 / ※ 実行中のプロセスが他のプロセスに割り込まれた時もこの状態になる | 
| 実行中 | プロセスにCPUを割り当てられた状態 | 
| 待機 | プロセスの読み書き処理待ち状態 / ※ このときCPUの処理は必要なく、読み書きが終わると実行可能状態になる | 
| 終了 | プロセスの処理が完了、あるいは中止した状態 | 
プロセスの生成
プロセスは、システムが起動したり、コマンドを実行したりすることで生成されます。
また、OSが親プロセスから子プロセスを複製することもできます。このことをforkと言います。
このとき、子プロセスと親プロセスは互いに影響し合わないので、片方に変更を加えても問題ありません。
子プロセスは、execというシステム関数を実行することで新しいプログラムを読み込んで前のプログラムやデータを上書きすることもできます。
プロセスの消滅
【正常時】
プロセスは終了すると消滅します。プロセスに対応するPCB領域はシステムに返されます。
※ PCB(Process Control Block)とは、プロセスの状態などに関する情報を保存するためのデータ構造のことです。PCBは、OSが保持しています。
PCBが保持している情報は主に次の4つです。
- プロセス管理情報
- メモリ管理情報
- ファイル管理情報
- スケジューリング情報
【異常時】
実行途中に消滅します。プロセスが使用しているリソースに対応した情報を削除すると返却されます。
【TIP】ゾンビプロセスって何??
プロセスは、基本的に実行中はメモリの一部の領域を使用しており、終了(消滅)したタイミングでその領域もリリース(開放)します。
しかし、プロセスの中にはそうはいかないものもあります。
このように、終了したにも関わらず、メモリを開放していない状態のプロセスを「ゾンビ」や「ゾンビプロセス」と言います。
ゾンビプロセスは、無駄にリソースを占拠することになるため、終了させてシステム上から完全に消去する必要があります。
ゾンビプロセスを消去するには、killコマンドを使用します。
詳しくは、次のシナリオ『プロセス管理 - 2』で解説していますので、そちらをご覧ください!
このように、プロセスにはライフサイクルがあり、様々な状態を遷移していく形で最終的には終了に至ります。プロセス管理において、どのプロセスがどのような状態にあるのかを把握していることはとても大切です。
プロセス管理とは
プロセス管理とは、どのプログラムにどれくらいのコンピュータリソースを割り当てるかをスケジューリングすることです。
これをプロセススケジューリングと呼んだりもします。
プロセスひとつひとつには、PID(Process ID)という識別番号が割り振られており、PIDによって各プロセスは認識・管理されます。
一つ(シングルコア)のCPUでは、同時に一つのプロセスしか実行できません。
そのためCPUは、もの凄い速さで複数のプロセスを切り替えることで、まるで同時に複数のプロセスを実行しているかのような状態を実現しています。
これを『マルチプロセス』や『マルチタスク』と言います。
また、マルチタスクにおいて、あるプロセスから他のプロセスへCPU使用権を切り替える一連の処理のことをコンテキストスイッチ(context switch)と言います。
スケジューリング
複数の実行可能なプロセスがある時に、どの順序でCPUを割り当てるかを考えることを言います。
スケジューリングアルゴリズム
スケジューリングに用いられるアルゴリズムです。
| アルゴリズム | 説明 | 
|---|---|
| First Come First Serve | 先着順でプロセスを実行していく / 平均待ち時間は長くなる | 
| Shortest Job Next | 処理時間が短い順に実行していく / 平均待ち時間を最小に抑えられる | 
| Priority Based Scheduling | 優先度(メモリ、時間で決定)が高い順に実行していく / 優先度が同じである場合は、先着順になる | 
| Round Robin | CPUを割り当てる固定時間(クオンタイム)を設定する /プロセスを並行して動作させられる | 
psコマンドとは
ps (process status)は、実行しているプロセスやその状態を表示するコマンドです。
プロセスIDや、CPU使用時間など、プロセス制御ブロックに保持されている情報を確認できます。
基本的な使い方
オプションを指定しないと、少数のプロセスのみを表示します。
ps
	PID TTY         TIME CMD
11575 pts/2   00:00:00 zsh
11601 pts/2   00:00:00 psよく使うオプション
| オプション | 説明 | 
|---|---|
| -a | 全てのプロセスを表示 | 
| -u | ユーザーを表示する | 
| -l | プロセスが使っているメモリの大きさ、親プロセスのPID、優先順位など | 
| -x | 他の端末にも結びついているプロセス | 
使用例
psコマンドは、オプション -a, -u, -xをの3つを合わせたauxを指定してよく使われます。
ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2204   740 ?        Sl   Jun15   0:02 /init
root       112  0.0  0.0   1752     8 ?        Ss   Jun15   0:00 /init
....このようにオプションにはハイフンをつけなくても指定が可能です。
ps auxを実行すると、以下のようなプロセスに関する情報が出てきます。
| 項目 | 説明 | 
|---|---|
| USER | プロセスを実行したユーザー | 
| PID | プロセスの識別番号 | 
| %CPU | 使用されているCPU割合 | 
| %MEM | 使用されているメモリの割合 | 
| VSZ | メモリの使用サイズ | 
| TTY | プロセスを実行している端末の名前 | 
| STAT | プロセスの現在の状態(status) / R:稼働中 / S:スリープ中 / D:スリープ中(現在制御不可) / T:停止処理中 / Z:ゾンビ状態 | 
| START | プロセスの開始時刻 | 
| TIME | プロセスの稼働時間 | 
| CMD | プロセスのコマンド(実行ファイル)とフルパス | 
PIDを指定して特定のプロセスのみを確認することもできます。
# PID 1のプロセスを表示します。
ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Sl     0:02 /init問題を解くためには、十分な画面サイズのPC環境をご利用下さい。
