web-dev-qa-db-ja.com

Linuxの最大PID

Tru64からLinuxにアプリケーションを移植しており、limits.hで定義されているPID_MAXを使用しています。 Linuxにはそのような定義がありません。手動で/proc/sys/kernel/pid_maxを読み取らずにcでPID_MAXを見つけるにはどうすればよいですか?図書館はありますか?

48
Alexander Stolz

デフォルトでは32768で、/proc/sys/kernel/pid_maxでシステムの値を読み取ることができます。

そして、より高い値を設定できます(最大222 = 32ビットマシンでは4,194,304)

echo 4194303 > /proc/sys/kernel/pid_max

詳細はこちら:

http://www.cs.wisc.edu/condor/condorg/linux_scalability.html(archive.org経由)

80
Exos

LinuxのPIDの最大値は構成可能です。 /proc/sys/kernel/pid_maxファイルからアクセスできます。このファイル(Linux 2.5の新機能)は、PIDがラップアラウンドする値を指定します(つまり、このファイルの値は最大PIDよりも1つ大きくなります)。このファイルのデフォルト値である32768は、以前のカーネルと同じ範囲のPIDになります。このファイルの値は、最大2 ^ 22(PID_MAX_LIMIT、約400万)までの任意の値に設定できます。

プログラミングの観点から、プロセスIDを操作するにはpid_tタイプを使用する必要があります。整数特性を使用して、その最小/最大値にアクセスすることもできます。以下は、x86_64プラットフォームで実行されているLinux 2.6.XでC++とBoostを使用して実行する例です。

$ cat test.cpp 
#include <sys/types.h>
#include <iostream>
#include <boost/integer_traits.hpp>

using namespace std;

int main ()
{
    cout << "pid_t max = " << boost::integer_traits<pid_t>::const_max << endl;
}

$ ./test 
pid_t max = 2147483647
12
user405725

proc(5) manページから:

/proc/sys/kernel/pid_max(Linux 2.5.34以降)

このファイルは、PIDがラップアラウンドする値を指定します(つまり、このファイルの値は最大PIDよりも1つ大きくなります)。この値より大きいPIDは割り当てられません。したがって、このファイルの値は、プロセスおよびスレッドの合計数に対するシステム全体の制限としても機能します。このファイルのデフォルト値である32768は、以前のカーネルと同じ範囲のPIDになります。 32ビットプラットフォームでは、32768がpid_maxの最大値です。 64ビットシステムでは、pid_maxは、2 ^ 22(PID_MAX_LIMIT、約400万)。

6