새 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를 가지지만 더 클 필요는 없습니다.

관련 정보