プロセスIDの最大値は何ですか?


回答:


61

Linuxでは、次を使用してシステムの最大PID値を見つけることができます。

$ cat /proc/sys/kernel/pid_max

この値は同じファイルを使用して書き込むこともできますが、32ビットシステムの場合は理論上の最大32768、64ビットの場合は4194304までしか拡張できません。

$ echo 32768 > /proc/sys/kernel/pid_max

ほとんどの64ビットシステムでは、この値を32ビットシステムで見られる値と同じ値に設定するのが規範的な慣行のようですが、これは要件ではなく慣例によるものです。

からman 5 proc

/proc/sys/kernel/pid_max  
  This file (new in Linux 2.5) specifies the value at which PIDs wrap around
  (i.e., the value in this file is one greater than the maximum PID). The
  default value for this file, 32768, results in the same range of PIDs as
  on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for
  pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22
  (PID_MAX_LIMIT, approximately 4 million).

いいえ、実行中のプロセスのPIDを変更することはできません。プロセスの開始時にカーネルによって連続番号として割り当てられ、それはその時点からの識別子です。新しいプロセスを取得するためにできることは、コードに新しいプロセスをフォークさせ、古いプロセスを終了させることだけです。


そして、私たちはとカーネルのビットのことを確認することができ、この
アクエリアスパワー

2
「PIDを変更できない」という話の好奇心をそそる半反例は、補助スレッドの1つがexec()を実行するマルチスレッドプログラムの場合です。プロセス全体をオーバーレイしますが、PIDを(実行中のスレッドのTIDに)変更します。
fche

3
32ビットマシンのPIDの最大値は、32768ではなく32767です。0はスケジューラであり、1はinitです。ユーザープロセスは

2
user129258は正しく、マニュアルページとカーネルドコの両方に同意しています。質問で要求されたPID最大許容値は、その擬似ファイルの値よりも1つ小さくなります。
JdeBP

1
@ user129258、これはinitを使用している場合にのみ有効です。シェルから直接起動する可能性が常にあります。たとえば、busyboxを使用して、ジョブ制御なしでそこから手動で実行します。または、起動スクリプトをいくつか用意して、シェルに戻ります。いずれにしても、そのような場合、シェルはPID 1になります。
ティム

9

他の答えは説明しました

  • /proc/sys/kernel/pid_max Linuxおよび
  • FreeBSDの場合は99999

しかし、質問ではオペレーティングシステムを指定していません。そのため、他にもいくつかあります。

  • Solarisでは、プロセスIDの最大値はカーネル調整可能パラメーター(pidmaxin /etc/system)で、デフォルトは30,000で、266〜999,999の間で設定できます。これはではないことに注意してください。これはmax_nprocs微妙に異なる機能を持つカーネル調整可能パラメーターです。
  • HP-UX 10では、カーネル調整パラメータは、許可されるプロセスIDの範囲を指定しprocess_id_minprocess_id_max規定します。
  • AIXでは、プロセスIDは、「プロセススロット」フィールドや「世代数」フィールドなど、いくつかのフィールドで構成されます。可能な最大値は0x03FFFFFEです。これは、フィールドが整数の下位26ビットのみを占有し、プロセス#1を除いてビット#0が常にゼロであるためです。
  • OpenBSDでは、最大は32766です。
  • NetBSDでは、最大は30000です。

OpenBSDの6.5のように、最大イントロ(2)によれば、今99999ではなく、32766
Kaiepi

4

FreeBSDでは、intro(2)(link)によるとPIDの値は0〜99999 です。マニュアルからの引用です:

プロセスID。
システム内のアクティブな各プロセスは、プロセスIDと呼ばれる負でない整数によって一意に識別されます。このIDの範囲は0〜99999です。

自分でソースコードを読みたい場合PID_MAXは、sys/sys/proc.h(link)で定義されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.