Linux プロセスの概要と識別子

プロセスとは何ですか

私たちは日常生活で Windows を使用することが多くなりますが、Windows を使用すると、タスク マネージャーを開いてさまざまなプロセスが実行されているのを確認できます。

 では、そのプロセスは私たちのプログラムと同じなのでしょうか?

本を読むと、プロセスとはコンピュータのメモリ内で実行されているプログラムを指すと書かれていることがよくあります。

この声明は実際には包括的なものではありません。

オペレーティング システムがプロセスを管理したい場合は、まずプログラムの実行データを収集してから管理する必要があるため、オペレーティング システムにはすべての実行データを適切に収集してクエリできるモジュールが必要です。このモジュールはPCB(プロセスコントロールブロック)と呼ばれるプロセスコントロールモジュール。

PCB では、すべてのプロセス管理タスクはプロセスに対応するプログラムと直接関係がなく、オペレーティング システムによるプロセスの管理は PCB と強く関連しており、PCB 上で動作するだけで済みます。

そして、プロセスはプロセス = PCB + プログラム データとコードです。

PCBとは何ですか? 何が入ってるの?

プロセス情報は、プロセス制御ブロックと呼ばれるデータ構造に配置されます。プロセス制御ブロックは、プロセス属性の集合として理解できます。

Linux システムでは、その PCB は struct task_struct{...} と呼ばれます。これは本質的に構造体として理解でき、プロセスを検索するかどうかに関係なく、プロセスのデータとステータスは構造体内に保存されます。削除するには、このプロセスを操作する前に、まずその task_struct を確認する必要があります。

では、具体的には、この構造にはどのような情報が保存されているのでしょうか?

さまざまな情報や現在のプロセスの状況など、多くのものが保存されていますが、重要なもののみを紹介します。

識別子

識別子: このプロセスを説明する一意の識別子は、他のプロセスを区別するために使用されます。

プロセスの識別子はPID と呼ばれ、PID はプロセスの一意の識別子であり、プロセスの一意のコード名です。

プロセスの PID の観察を容易にするために、まずランダムなプログラムを作成して実行します。

上記の getpid() 関数と getppid() 関数は、それぞれ PID と PPID を取得するためのものであり、ヘッダー ファイル unistd.h をインクルードする必要があります。

左側では、無限ループ プログラムが実行され続けています。

右側では、 ps axj | head -1 && ps axj | grep myproc コマンドを使用してプロセス情報を表示します。PID はプロセスの一意の識別子です。

各プロセスの PID も PCB に保存されます。

PPID はその親プロセスの PID です。

ここで新しいことを導入しましたが、親プロセスとは何でしょうか? 対応する子プロセスはありますか? はい。

 fork() 関数を使用して子プロセスを作成できます。fork が子プロセスの作成に成功すると、子プロセスの PID が親プロセスに返され、子プロセスに 0 が返されます。作成に失敗した場合は、 0 未満の数値が返されます。

fork 関数を使用して別のフローを作成し、コードを実装します。2 つのプロセス (1 つは親プロセスと呼ばれ、もう 1 つは子プロセスと呼ばれます) は、子プロセスと親プロセスで異なる実行結果を持つ可能性があります。

コードを実行する

 psコマンドを使う

この時点で、同じ名前のプロセスが 2 つあることがわかり、それらの PID と PPID を詳しく見ることができます。

PID 23700 の上記のプロセスは、PID 23701 のプロセスの親プロセスです。

しかし、PID 23700 のプロセスの親プロセス 15604 は誰でしょうか?

ps および grep コマンドを使用してプロセス 15604 を検索します

 ここでは、それが bash (コマンド ライン インタープリター) であることがわかります。

ソースを上向きに追跡し続けると、オペレーティング システムに至るまでソースを追跡できるようになります。下に降りて自分で試してみることもできます。

要約する

1. プロセスは PCB のデータとコード、およびプロセスで構成されていることを理解します。(強調)

2. fork 関数を使用して別のストリームを作成し、コードを実装し、2 つのプロセス (1 つは親プロセスと呼ばれ、もう 1 つは子プロセスと呼ばれます) を使用することを知っています。子プロセスと親プロセスでは実行結果が異なる場合があります。 。

3. ps コマンドを使用してプロセスの関連情報を表示する方法を学習しました。

おすすめ

転載: blog.csdn.net/fengjunziya/article/details/130478463