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