Unix / Linux-プロセス管理

この章では、Unixでのプロセス管理について詳しく説明します。Unixシステムでプログラムを実行すると、システムはそのプログラム用の特別な環境を作成します。この環境には、システムで他のプログラムが実行されていないかのように、システムがプログラムを実行するために必要なすべてのものが含まれています。

Unixでコマンドを発行するたびに、新しいプロセスが作成または開始されます。あなたが試したときlsディレクトリの内容を一覧表示するコマンドで、プロセスを開始しました。プロセスは、簡単に言えば、実行中のプログラムのインスタンスです。

オペレーティングシステムは、と呼ばれる5桁のID番号を介してプロセスを追跡します。 pid または process ID。システム内の各プロセスには固有のものがありますpid

可能なすべての数が使い果たされ、次のpidがロールまたは最初からやり直すため、pidは最終的に繰り返されます。Unixが各プロセスを追跡するために使用するのはpidであるため、どの時点でも、同じpidを持つ2つのプロセスはシステムに存在しません。

プロセスの開始

プロセスを開始する(コマンドを実行する)とき、それを実行する方法は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 コマンドは(入力を必要としない)入力を必要とし、キーボードからの入力を待ちます。

プログラムがフォアグラウンドで実行されていて時間がかかる場合、プログラムが処理を終了して終了するまでプロンプトは使用できないため、他のコマンドを実行(他のプロセスを開始)することはできません。

バックグラウンドプロセス

バックグラウンドプロセスは、キーボードに接続せずに実行されます。バックグラウンドプロセスでキーボード入力が必要な場合は、待機します。

プロセスをバックグラウンドで実行する利点は、他のコマンドを実行できることです。別の開始するために完了するまで待つ必要はありません!

バックグラウンドプロセスを開始する最も簡単な方法は、アンパサンド(&)コマンドの最後。

$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 コマンドは入力を必要としますが(入力は必要ありません)、フォアグラウンドに移動してキーボードからデータを提供するまで停止状態になります。

その最初の行には、バックグラウンドプロセスに関する情報(ジョブ番号とプロセスID)が含まれています。バックグラウンドとフォアグラウンドの間でジョブ番号を操作するには、ジョブ番号を知っている必要があります。

Enterキーを押すと、次のように表示されます。

[1]   +   Done                 ls ch*.doc &
$

最初の行は、 lsコマンドのバックグラウンドプロセスが正常に終了します。2つ目は、別のコマンドのプロンプトです。

実行中のプロセスの一覧表示

を実行することで、独自のプロセスを簡単に確認できます。 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 (完全な場合は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 コマンド-

シニア番号 列と説明
1

UID

このプロセスが属するユーザーID(プロセスを実行している人)

2

PID

プロセスID

3

PPID

親プロセスID(それを開始したプロセスのID)

4

C

プロセスのCPU使用率

5

STIME

プロセス開始時間

6

TTY

プロセスに関連付けられている端末タイプ

7

TIME

プロセスにかかるCPU時間

8

CMD

このプロセスを開始したコマンド

と一緒に使用できる他のオプションがあります ps コマンド-

シニア番号 オプションと説明
1

-a

すべてのユーザーに関する情報を表示します

2

-x

端末のないプロセスに関する情報を表示します

3

-u

-fオプションなどの追加情報を表示します

4

-e

拡張情報を表示します

プロセスの停止

プロセスの終了は、いくつかの異なる方法で実行できます。多くの場合、コンソールベースのコマンドから、CTRL + Cキーストローク(デフォルトの割り込み文字)を送信すると、コマンドが終了します。これは、プロセスがフォアグラウンドモードで実行されている場合に機能します。

プロセスがバックグラウンドで実行されている場合は、を使用してそのジョブIDを取得する必要があります。 psコマンド。その後、あなたは使用することができます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番号が割り当てられています。システム内の各ユーザープロセスには、親プロセスがあります。

実行するコマンドのほとんどは、親としてシェルを持っています。チェックしてくださいps -f このコマンドがプロセスIDと親プロセスIDの両方をリストした例。

ゾンビと孤立したプロセス

通常、子プロセスが強制終了されると、親プロセスは SIGCHLD信号。その後、親は他のタスクを実行するか、必要に応じて新しい子を再起動できます。ただし、子が強制終了される前に親プロセスが強制終了される場合があります。この場合、「すべてのプロセスの親」、initプロセスは、新しいPPID(親プロセスID)になります。場合によっては、これらのプロセスは孤立プロセスと呼ばれます。

プロセスが強制終了されると、 ps リストにはまだプロセスが表示される場合があります Z状態。これはゾンビですか?プロセスは停止しており、使用されていません。これらのプロセスは、孤立したプロセスとは異なります。彼らは実行を完了しましたが、それでもプロセステーブルにエントリを見つけます。

デーモンプロセス

デーモンはシステム関連のバックグラウンドプロセスであり、多くの場合、他のプロセスからのルートおよびサービス要求のアクセス許可で実行されます。

デーモンには制御端末がありません。開けない/dev/tty。あなたがするなら"ps -ef" と見て tty フィールドでは、すべてのデーモンに ? のために tty

正確に言うと、デーモンはバックグラウンドで実行されるプロセスであり、通常、デーモンが処理できる何かが発生するのを待ちます。たとえば、印刷コマンドを待機しているプリンタデーモン。

長時間の処理を必要とするプログラムがある場合は、それをデーモンにして、バックグラウンドで実行する価値があります。

トップコマンド

ザ・ top コマンドは、さまざまな基準でソートされたプロセスをすばやく表示するための非常に便利なツールです。

これは、頻繁に更新され、物理メモリと仮想メモリ、CPU使用率、負荷平均、およびビジー状態のプロセスに関する情報を表示するインタラクティブな診断ツールです。

topコマンドを実行し、さまざまなプロセスによるCPU使用率の統計を確認するための簡単な構文を次に示します。

$top

ジョブIDとプロセスID

バックグラウンドおよび中断されたプロセスは通常、 job number (job ID)。この番号はプロセスIDとは異なり、短いために使用されます。

さらに、ジョブは、連続して、または同時に並行して実行される複数のプロセスで構成することができます。ジョブIDの使用は、個々のプロセスを追跡するよりも簡単です。