Linux - Process



 ◆ プロセスの監視

 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 のプロセスを通常終了
 $ kill -TERM 300

 ◆ 実行例 : シグナルIDを指定して、PID 300 のプロセスを通常終了
 $ kill -15 300


 killコマンドは以下の構文でも実行可能です。つまり上記と下記のコマンド実行例は同じ結果となります。

 ◆ 構文 : kill -s [ シグナル名またはシグナルID ] PID
 ◆ 構文 : kill -SIGシグナル名 PID

 $ kill -s TERM 300

 $ kill -s 15 300


 killコマンドはシグナルIDやシグナル名を指定せずに実行すると、デフォルトでTERMシグナルが送られる
 ので、以下の実行例も上記の実行例と同じ結果が得られるコマンドです。

 $ kill 300



 さて、その他のシグナルを送る場合の実行例を見てみましょう。例えば、プログラムの動作に異常が発生
 して正常終了できない場合、KILLシグナル(9)を使用して強制終了させますが、その際の実行例は以下。
 ※ KILLシグナル(9)を実行して終了した場合、ファイルの破損などシステム障害が発生する可能性があるので最終手段です。

 $ kill -KILL 300



 killコマンドでは、psコマンドやtopコマンドによりPIDを調べて、PIDを指定してプロセスを使用する必要
 がありますが
killall コマンドを使用すればPIDを指定することなくプロセスを指定してシグナルを送れます。
 killallコマンドは、killコマンドと同様に3種類の構文があります。

 ◆ 構文 : killall - [ シグナル名またはシグナルID ] プロセス名
 ◆ 構文 : killall -s [ シグナル名またはシグナルID ] プロセス名
 ◆ 構文 : killall -SIGシグナル名 プロセス名


 例えば、WebブラウザのFirefoxのプロセスを終了させるための実行コマンドは以下の通りです。

 $ killall -TERM firefox




 ◆ uptimeコマンド

 システムの稼働時間、システムの平均負荷状況(load average)はuptimeコマンドにより確認できます。

 

項番 説明
@  現在の時刻
A  システム稼働時間
B  現在ログイン中のユーザ数
C  システムの平均負荷状況 ( 過去1分間、過去5分間、過去15分間の順番で表示 )



Linux 技術入門

Copyright(C) 2002-2024 ネットワークエンジニアとして All Rights Reserved