新しいPIDが古いPIDより小さいのはなぜですか?

新しいPIDが古いPIDより小さいのはなぜですか?

新しいプロセスの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がありますが、大きくする必要はありません。

関連情報