ある所で
レクチャ中の事。
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 の値については略。
脳の容量が微妙なんで根拠ヌキの話をする事が多くって嫌になる。