プロセスIDの最大値はいくらですか?

プロセスIDの最大値はいくらですか?

プロセスIDの最大値はいくらですか?

また、プロセスIDを変更できますか?

答え1

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

$ cat /proc/sys/kernel/pid_max

同じファイルを使用して値を書き込むこともできますが、値は理論的最大値である32768(2 ^ 15)(32ビットシステムの場合)または4194304(2 ^ 22)(64ビットシステムの場合)まで拡張されます。

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

ほとんどの64ビットシステムでは、この値を32ビットシステムと同じ値に設定することが標準的に見えますが、これは必須ではなく慣例によるものです。

~からman 5 proc:

/proc/sys/kernel/pid_max

このファイル(Linux 2.5の新機能)はPIDラップ値を指定します(つまり、このファイルの値は最大PIDより1大きい)。このファイルのデフォルト値である32768は、以前のカーネルと同じPID範囲を生成します。 32ビットプラットフォームでは、32768が最大値ですpid_max。 64ビットシステムでは、最大2^22(約400万)pid_maxの値に設定できます。PID_MAX_LIMIT

いいえ、実行中のプロセスのPIDは変更できません。プロセスが開始されると、カーネルはそのプロセスの識別子であるシーケンス番号を割り当てます。新しいプロセスを取得する唯一の方法は、コードから新しいプロセスをフォークして古いプロセスを終了することです。

答え2

他の答えはすでに説明しています。

  • /proc/sys/kernel/pid_maxLinuxと
  • FreeBSDは99999です。

ただし、質問はオペレーティングシステムを指定しません。ここに他のいくつかがあります:

  • Solarisでは、プロセスIDの最大値はカーネル調整可能パラメータです。pidmaxin /etc/system- デフォルトは30,000で、266から999,999の間の値に設定できます。これではなく、max_nprocsわずかに異なる機能を備えた調整可能なカーネルです。
  • HP-UX 10では、カーネルチューナブルは許可されているプロセスIDの範囲を指定しprocess_id_minて規制します。process_id_max
  • AIX では、プロセス ID には、プロセス・スロットおよびビルド数フィールドを含む複数のフィールドが含まれます。可能な最大値は 0x03FFFFFE です。なぜなら、これらのフィールドは整数の下位26ビットのみを占有し、プロセス#1を除いて、ビット#0は常に0であるからです。
  • OpenBSDの最大値は32766です。
  • NetBSDでは、最大値は30000です。

答え3

Linuxの場合

プロセスIDの最大値はいくらですか?

 $ cat /proc/sys/kernel/pid_max
 4194304
 $ sysctl kernel.pid_max
 kernel.pid_max = 4194304

32ビットシステムでは、結果は32768です。

達成できる最大値を言う場合

カーネルの定義によると: https://elixir.bootlin.com/linux/latest/source/include/linux/threads.h#L34

/*
 * This controls the default maximum pid allocated to a process
 */
#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)

/*
 * A maximum of 4 million PIDs should be enough for a while.
 * [NOTE: PID/TIDs are limited to 2^30 ~= 1 billion, see FUTEX_TID_MASK.]
 */
#define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \
    (sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT))

CONFIG_BASE_SMALLを確認できます。

cat /boot/config-`uname -r`| grep -i config_base_small

私のRHELシステムでは、計算は2 ^ 22 = 4 * 1024 * 1024から400万に制限されています。

テストを行う

>>> echo 4200000 > /proc/sys/kernel/pid_max; echo $?
bash: echo: write error: Invalid argument
1
>>> echo 4194304 > /proc/sys/kernel/pid_max; echo $?
0
>>> echo 4194305 > /proc/sys/kernel/pid_max; echo $?
bash: echo: write error: Invalid argument
1

また、プロセスIDを変更できますか?

現在のプロセスのPIDは変更できません。
ただし、制限を変更するには、次の手順に従ってください。

## Using PROC interface.
## Changes Temporarily and immediate. It reverts to the default value after reboot 
echo "VALUE" > /proc/sys/kernel/pid_max

## Using sysctl interface; It is temporary and immediate too.
sysctl -w kernel.pid_max=VALUE

この値を維持するには、/etc/sysctl.confまたは/etc/sysctl.d/ファイルにパラメータを追加します。リロードしてください:

sysctl -p [File from which the conf needs to be loaded if present]

引用:

答え4

FreeBSDでは、PID値の範囲は0から99999です。intro(2)(関連)。マニュアルの引用は次のとおりです。

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

ソースコードを直接読むには、定義はPID_MAX次の場所にあります。sys/sys/proc.h(関連)

関連情報