ある所で

レクチャ中の事。
C10K なソレの話をしていた。10000 クライアントではなんとかセイフだが、10倍になっちゃうとオワる、という話。なんですが、linux の pid_t 型は int で typedef されている。がしかし、unix 系のプロセス ID は符号付き 16 bits 整数で、というのが常識として input されていて話が止まる。むむ。何故に 16 bits 表現なんだ。その根拠は何ッスか? (自問自答なあたり、脳がオワってます

で、どんなカラクリか、と言いつつ kernel source の grep かけまくり。ようやく、linux カーネル 2.6 解読室なソレから拾った pid_max が PID の最大値なナニを元に根拠を発見。今日もある話の中で「蓄積が無い」という微妙な事象を自分で指摘したんですが、駄目人間一歩手前だよ。

で、pid_max な根拠ですが、まず pid_max は kernel/pid.c にて定義。

int pid_max = PID_MAX_DEFAULT;

PID_MAX_DEFAULT で初期化されてます。これがどこで定義 (というか宣言か) されているか、というと

$ find /usr/include |xargs grep PID_MAX_DEFAULT
/usr/include/linux/threads.h:#define PID_MAX_DEFAULT 0x8000
$

でした。0x8000 の値については略。

脳の容量が微妙なんで根拠ヌキの話をする事が多くって嫌になる。