O que determina qual PID um processo será designado?

7

O que determina qual PID um processo será atribuído?

Parece que existe um limite superior para o valor inteiro usado para o ID; qual é esse limite e onde é definido?

Existe um intervalo reservado para processos que não são criados pelo usuário?

Só para ficar claro, estou perguntando isso mais por curiosidade do que por qualquer razão prática.

    
por chb 30.10.2017 / 02:27

1 resposta

12

Qual é o valor máximo do ID do processo? abrange o máximo; existem processos reservados ( 0 e 1 são notáveis) mas não muitos, e há um pouco de código no kernel que escolhe o próximo inteiro livre (a maioria unix) ou um pid aleatório (OpenBSD, ou alguns tipos de Linux). O OpenBSD chama esse allocpid , que pode ser encontrado em 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;
}
    
por 30.10.2017 / 02:55

Tags