プロセスに割り当てられるPIDはどのように決定されますか?
IDに使用される整数値には上限があるようです。この制限は何ですか?どこで定義されていますか?
ユーザーが作成しなかったプロセスのために予約された範囲はありますか?
明らかに言えば、私がこの質問をする理由は実際的な理由というよりは好奇心のためです。
答え1
プロセスIDの最大値はいくらですか?最大値をオーバーライドします。維持されるプロセス(0
そして1
注目すべき)がありますが、多くはありません。カーネルには、次の無料の整数(ほとんどのUnix)またはランダムなpid(OpenBSDまたは一部のLinuxバージョン)を選択するいくつかのコードがあります。 OpenBSDはこれを呼び出し、allocpid
次に見つけることができます。kern/kern_fork.c
/* Find an unused pid */
pid_t
allocpid(void)
{
static pid_t lastpid;
pid_t pid;
if (!randompid) {
/* only used early on for system processes */
pid = ++lastpid;
} else {
/* Find an unused pid satisfying lastpid < pid <= PID_MAX */
do {
pid = arc4random_uniform(PID_MAX - lastpid) + 1 +
lastpid;
} while (ispidtaken(pid));
}
return pid;
}