Unix / Linux – プロセス管理

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------

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を使用する方が簡単です。

次のページ

前のページ

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。