Linuxでは、PID番号とはどういう意味ですか?

Linuxでは、PID番号とはどういう意味ですか?

Linuxでは、プロセス識別子の意味が何であるかを知りたいです。プロセスの順序ですか?

プロセスの性質を識別するコードですか、それともプロセスを一意に識別するランダムに生成された数値ですか?

同様のPIDを持つ異なるプロセスはどのように関連していますか?

答え1

Linuxカーネルは、新しいプロセスの開始時に1から始まる一意の整数を割り当てます。これは/sbin/init通常PID 1最初に開始されたプロセスであるため、これを確認できます。

同様のPIDを持つ異なるプロセスはどのように関連していますか?

習慣。 PIDが近づくと、おそらく同じ時間に始まります。 32ビットLinuxでは、PIDは32768に制限されているため、カーネルがこの数に達すると再起動します。 64ビットLinuxでは、PID制限は2 ^ 22で、オーバーフローはほとんど発生しません(稼働時間が長く、数千のプロセスを開始および停止しない限り)。

答え2

PID は「プロセス識別子」の略語です。これがシステムのプロセスを「ユニークに」識別する方法です。ここでは「固有」を引用符で囲みました。これは、PIDが割り当てられたプロセスの存続期間中にのみ一意であるためです。

PIDの選択方法はシステムによって異なります。元のアプローチは、最大値に達するまで未使用の次の数字を割り当てることです。最大値に達すると、以前に使用されていたが現在使用されていない数字の再利用が開始され、最も低い数字から再開されます。

Linuxはシンプルで高速なので、これらの原始的なアプローチを採用しています。欠点は、誤って書かれたソフトウェアの中には、内部乱数ジェネレータをシードしたり、一時ファイル名を生成するためにPIDを使用するなどの方法でPIDに頼ることができることです。これらのソフトウェアを使用する場合(幸いなことに、そのようなソフトウェアはますます少なくなります)。

一部のシステム(OpenBSDなど)は、1から最大値の間で現在使用されていない値からPIDをランダムに選択します。これはローカルセキュリティの問題を排除しますが、代わりに新しいプロセスの作成が遅くなり、インターネット上の任意のユーザーに潜在的に不快なこと(たとえば、次に説明する脆弱性)が発生する可能性があります。このセキュリティスタック交換の質問)、PIDがすぐに再利用されないと予想されるソフトウェアがハングすることがあります。

FreeBSDなどの他のソリューションでは、アプローチを選択したり、中間点を使用したりできます。これにより、処理する特定のセキュリティ問題のセットを選択するか(ヒント、これはリモートの問題ではなくローカルの問題である可能性があります)、中間点を選択することもできます(しばしば正しい選択です)。

関連情報