新しいプロセスのpidが既存のプロセスのpidより小さい場合がありますか?終了後に再起動するデーモンがあります。 pidを記録した結果、pidが最初は小さくなって大きくなることがわかりました。
考えられる理由は何ですか?
================================================== =============
質問して申し訳ありませんでした。ありがとうございます。
今答えを見つけたと思います。 /proc/sys/kernel/pid_maxには32768(携帯電話のAndroidオペレーティングシステム)が表示されます。長期間テストした後、この値を超えて再割り当てされたようです。もう一度ありがとうございます。
答え1
Linuxでは、PIDは順番に割り当てられますが、最終的にシステムはPID制限に達して再起動して割り当てられたPIDをスキップします。
答え2
私は通常、攻撃者がプロセスのPIDの文字列表現を含む一時ファイル名を推測するのを防ぐために、PIDがランダムに割り当てられたと思います。しかし、私は間違っていた。以下の小さなCプログラムを作成し、RHEL 5 x86_64で実行して確認しました。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int
main(int ac, char **av)
{
int cnt;
pid_t firstpid = getpid();
long diff = 32768 - firstpid;
cnt = diff;
printf("Going to fork %d times\n", cnt);
while (cnt)
{
pid_t mypid = getpid();
printf("cnt %d, pid %d\n", cnt, mypid);
switch (fork())
{
case 0: break;
case -1:
fprintf(stderr, "fork() problem: %s\n", strerror(errno));
_exit(9);
break;
default:
_exit(0);
break;
}
--cnt;
}
return 0;
}
私が得ることができる最大のPID番号は32767(2 ^ 15-1)で、符号付き2バイトの長さに入ることができます。猿のおじさんになりたい
答え3
これはセキュリティ問題である予測可能性を排除します。
答え4
これは正常です。新しいプロセスが開始されると、新しいプロセスIDがありますが、大きくする必要はありません。