Contents
Unix / Linux – プロセス管理
この章では、Unixでのプロセス管理について詳しく説明します。Unixシステム上でプログラムを実行すると、システムはそのプログラム用の特別な環境を作成します。
この環境には、システム上で他のプログラムが実行されていないかのように、プログラムを実行するためにシステムに必要なものがすべて含まれています。
うとすると、プロセスが開始されました。プロセスは、単純に言えば、実行中のプログラムのインスタンスです。
オペレーティングシステムは、pidまたはプロセスIDと呼ばれる5桁のID番号を使用してプロセスを追跡します。システム内の各プロセスには一意のPIDがあります。
可能なすべての数字が使い果たされ、次のPIDがロールオーバーまたは開始されるため、ピッドは最終的に繰り返されます。いずれの時点でも、システム内に同じPIDを持つ2つのプロセスは存在しません。これは、Unixが各プロセスを追跡するために使用するpidであるためです。
プロセスの開始
プロセスを起動する(コマンドを実行する)場合、実行できる方法は2つあります。
- フォアグラウンドプロセス
- バックグラウンドプロセス
フォアグラウンドプロセス
デフォルトでは、起動するすべてのプロセスはフォアグラウンドで実行されます。キーボードから入力を受け取り、その出力を画面に送ります。
これはlsコマンドで確認できます。現在のディレクトリにあるすべてのファイルを一覧表示する場合は、次のコマンドを使用できます。
$ls ch*.doc
これはchで始まりdocで終わるものを示しています。
ch01-1.doc ch010.doc ch02.doc ch03-2.doc ch04-1.doc ch040.doc ch05.doc ch06-2.doc ch01-2.doc ch02-1.doc
プロセスはフォアグラウンドで実行され、出力されます
プログラムがフォアグラウンドで実行されていて、時間がかかりますが、プログラムが処理を終えて出てくるまで、プロンプトが利用できないため、他のコマンドを実行することはできません(他のプロセスを開始することはできません)。
バックグラウンドプロセス
バックグラウンドプロセスはキーボードに接続されずに実行されます。バックグラウンド・プロセスでキーボード入力が必要な場合は、待機します。
バックグラウンドでプロセスを実行する利点は、他のコマンドを実行できることです。
バックグラウンドプロセスを開始する最も簡単な方法は、コマンドの最後にアンパサンド(&)を追加することで実行されます
$ls ch*.doc &
これで結果は下記のようになります
ch01-1.doc ch010.doc ch02.doc ch03-2.doc ch04-1.doc ch040.doc ch05.doc ch06-2.doc ch01-2.doc ch02-1.doc
実行中プロセスのリスト表示
ps(プロセスステータス)コマンドを次のように実行することで、自分のプロセスを確認することができます。
$ps PID TTY TIME CMD 18358 ttyp3 00:00:00 sh 18361 ttyp3 00:01:31 abiword 18789 ttyp3 00:00:00 ps
psで最も一般的に使用されるフラグの1つは、-f(full for f)オプションです。詳細を表示します。
$ps -f UID PID PPID C STIME TTY TIME CMD amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
ps -fコマンドで表示されるすべてのフィールドの説明です。
S.No. | 列と説明 |
---|---|
1 | UID
このプロセスが属するユーザーID(実行しているユーザー) |
2 | PID
プロセスID |
3 | PPID
親プロセスID(それを開始したプロセスのID) |
4 | C
プロセスのCPU使用率 |
5 | スチーム
プロセス開始時間 |
6 | TTY
プロセスに関連付けられた端末タイプ |
7 | 時間
プロセスで使用されたCPU時間 |
8 | CMD
このプロセスを開始したコマンド |
psコマンドと一緒に使用できる他のオプションがあります-
S.No. | オプションと説明 |
---|---|
1 | -a
すべてのユーザーに関する情報を表示します。 |
2 | -×
端末のないプロセスに関する情報を表示します。 |
3 | -u
-fオプションのような追加情報を表示します。 |
4 | -e
拡張情報を表示する |
プロセスの停止
プロセスがバックグラウンドで実行されている場合は、psコマンドを使用してジョブIDを取得する必要があります。その後、次のようにkillコマンドを使用してプロセスを終了することができます。
$ps -f UID PID PPID C STIME TTY TIME CMD amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f $kill 6738 Terminated
ここで、killコマンドはfirst_oneプロセスを終了します。プロセスが通常のkillコマンドを無視する場合、kill -9の後に次のようにプロセスIDを指定できます。
$kill -9 6738 Terminated
親プロセスと子プロセス
各Unixプロセスには、プロセスID(pid)と親プロセスID(ppid)の2つのID番号が割り当てられています。システム内の各ユーザープロセスには親プロセスがあります。
実行するコマンドのほとんどはシェルを親として持っています。このコマンドがプロセスIDと親プロセスIDの両方を列挙したps -fの例を確認してください。
ゾンビと孤児のプロセス
通常、子プロセスが強制終了されると、親プロセスはSIGCHLDシグナルによって更新されます。その後、親は別のタスクを実行するか、必要に応じて新しい子を再起動することができます。
ただし、親プロセスが子プロセスを終了する前に強制終了されることがあります。この場合、initプロセスである”すべてのプロセスの親” が新しいPPID(親プロセスID)になります。場合によっては、これらのプロセスをオーファンプロセスと呼びます。
プロセスが終了すると、psリストにはZ状態のプロセスが表示されることがあります。これはゾンビまたはプロセスがないことです。プロセスは停止し、使用されていません。これらのプロセスは、孤立したプロセスとは異なります。これらは実行を完了したが、依然としてプロセステーブルにエントリがあります。
デーモンプロセス
デーモンは、システム関連のバックグラウンドプロセスであり、多くの場合、他のプロセスからのルート要求とサービス要求のアクセス許可で実行されます。
デーモンはバックグラウンドで実行されるプロセスで、通常は何かが起きるのを待っています。たとえば、印刷デーモンが印刷コマンドを待機しているとします。
時間のかかる処理を必要とするプログラムがあれば、それをデーモンにしてバックグラウンドで実行することも必要になります
トップコマンド
トップコマンドはすぐにさまざまな基準でソート処理を示すために非常に便利なツールです。
これは、頻繁に更新され、物理メモリと仮想メモリ、CPU使用率、負荷平均、および使用中のプロセスに関する情報を表示する対話式診断ツールです。
topコマンドを実行し、CPU使用率の統計をさまざまなプロセスで表示する簡単な構文は次のとおりです。
$top
ジョブIDとプロセスID
バックグラウンドおよび中断されたプロセスは、通常、ジョブ番号(ジョブID)によって操作されます。この番号はプロセスIDとことなります
さらに、ジョブは、複数のプロセスを直列または同時に並列に実行することで構成できます。個々のプロセスを追跡するよりも、ジョブIDを使用する方が簡単です。
次のページ