◆ プロセスの監視
Linux上のプログラムを実行すると、そのプログラムにメモリが割り当てられて、CPUで処理されますが、
この際に、この動作中のプログラムをOSが管理します。この管理する単位のことをプロセスと言います。
プロセスは新しいプログラムを実行するごとに生成されます。プロセス情報はpsコマンドで確認できます。
※ 現在実行されているプロセス情報は ps コマンドで確認できますが、プログラムによりすぐに終了してしまうものがあります。
◆ 構文 : ps [ オプション ]
オプション |
説明 |
a |
他のユーザーの全てのプロセスを表示 |
f |
プロセスの親子関係を表示 |
u |
プロセスのユーザー情報を表示 |
x |
端末を利用していない全てのプロセスを表示 |
-e |
全てのプロセスを表示 |
-l |
プロセスの詳細情報の表示 |
-p PID |
指定したプロセスID(PID)の情報のみ表示 |
-C プロセス名 |
指定した名前のプロセスのみ表示 |
-w |
長い行を折り返して表示 |
※ psコマンドでは「 - 」を付けないオプション、「 - 」を付けるオプションがあります。
PSコマンドはオプションをつけずに実行すると、psコマンドを実行した端末で実行されているプロセスが
表示されます。以下例では、現在実行中のpsコマンドのプロセスと、ログイン時に適用されたbashシェル
のプロセスの2つが表示されています。
システムで実行されている全てのプロセスを表示するには「a」と「x」のオプションを使用します。
あわせてユーザ情報を表示させるために「u」オプションも指定して、以下のように ps aux と実行。
ps axコマンド、またはps auxコマンドの出力ラベルは以下の意味となります。
項目 |
説明 |
USER |
プロセスを実行しているユーザ名 |
PID |
プロセスID |
%CPU |
CPU使用率 |
%MEM |
メモリ使用率 |
VSZ |
割り当て済みの仮想アドレス空間サイズ |
RSS |
物理メモリ使用量 ( %MEMに比例 ) |
TTY |
プロセスを実行した端末 |
STAT |
プロセスの状態 ( ※1 下表を参照 ) |
START |
プロセスの起動時刻 |
TIME |
消費したCPU使用時間 |
COMMAND |
実行コマンドまたはプログラム名 |
※1 STATの代表的な状態は以下
STATの一文字目 |
意味 |
D |
スリープ ( CPU放棄 )、割り込み不可の状態 : I/O待ち |
R |
実行可能 ( CPU使用中、使用可能 ) |
S |
スリープ ( CPU放棄 )、割り込み可能な状態 : キー入力待ち |
T |
停止状態 |
Z |
プロセス終了済み状態 : 但し、親プロセスの処理待ち |
◇ 実行中のプロセスのリアルタイム表示
topコマンドを使用すれば現在実行中のプロセスをリアルタイムに表示します。デフォルトでは
CPUの使用率が多い順に表示されます。topコマンドの終了させるためには「q 」を入力します。
◇ プロセスの親子関係
ところでプロセスによって親子関係があります。あるプロセスが実行中に他のプロセスを起動した場合、
元のプロセスのことを親プロセス、親プロセスから起動されたプロセスのことを子プロセスと言います。
このプロセスの親子関係は、pstreeコマンドにより確認できます。
◆ プロセスの制御
プロセスを制御する信号はシグナルと言います。プロセスに対してシグナルを送るためには
killコマンドを使用します。シグナルには以下のようなものがあります。
シグナル名 |
シグナルID |
説明 |
HUP |
1 |
ハングアップ(端末との接続が切断) |
INT |
2 |
キーボードからの割り込み |
QUIT |
3 |
キーボードからのプロセスの中止 |
KILL |
9 |
強制終了 |
TERM |
15 |
通常終了 |
CONT |
18 |
一時停止中のプロセスを再開 |
STOP |
19 |
一時停止 |
◆ 構文 : kill - [ シグナル名またはシグナルID ] PID
プロセスは、PID( Proccess ID )と呼ばれる固有の識別子を持っています。このPIDは、プロセス
の開始時に順番に割り当てられますが、Linuxではシステム起動時に先ず最初にinitプログラムが実行
されるため、initのPIDは常に1となります。プロセスは、プロセスを開始したユーザから引き継がれた
UID(User ID)とグループを表すGID(Group ID)を持っておりそれらを状況により使い分けています。
さて、コマンドの実行例を見てましょう。以下のコマンドは例えば「PID 300」のプロセスに対して
TERMのシグナル(通常終了)を送る実行例です。シグナル名またはシグナルIDを指定し実行できます。
◆ 実行例 : シグナル名を指定して、PID 300 のプロセスを通常終了
◆ 実行例 : シグナルIDを指定して、PID 300 のプロセスを通常終了
killコマンドは以下の構文でも実行可能です。つまり上記と下記のコマンド実行例は同じ結果となります。
◆ 構文 : kill -s [ シグナル名またはシグナルID ] PID
◆ 構文 : kill -SIGシグナル名 PID
killコマンドはシグナルIDやシグナル名を指定せずに実行すると、デフォルトでTERMシグナルが送られる
ので、以下の実行例も上記の実行例と同じ結果が得られるコマンドです。
さて、その他のシグナルを送る場合の実行例を見てみましょう。例えば、プログラムの動作に異常が発生
して正常終了できない場合、KILLシグナル(9)を使用して強制終了させますが、その際の実行例は以下。
※ KILLシグナル(9)を実行して終了した場合、ファイルの破損などシステム障害が発生する可能性があるので最終手段です。
killコマンドでは、psコマンドやtopコマンドによりPIDを調べて、PIDを指定してプロセスを使用する必要
がありますが killall コマンドを使用すればPIDを指定することなくプロセスを指定してシグナルを送れます。
killallコマンドは、killコマンドと同様に3種類の構文があります。
◆ 構文 : killall - [ シグナル名またはシグナルID ] プロセス名
◆ 構文 : killall -s [ シグナル名またはシグナルID ] プロセス名
◆ 構文 : killall -SIGシグナル名 プロセス名
例えば、WebブラウザのFirefoxのプロセスを終了させるための実行コマンドは以下の通りです。
◆ uptimeコマンド
システムの稼働時間、システムの平均負荷状況(load average)はuptimeコマンドにより確認できます。
項番 |
説明 |
@ |
現在の時刻 |
A |
システム稼働時間 |
B |
現在ログイン中のユーザ数 |
C |
システムの平均負荷状況 ( 過去1分間、過去5分間、過去15分間の順番で表示 ) |
|