No Linux, os PIDs são atribuídos em ordem, mas eventualmente o sistema atingirá seu limite de PID e recomeçará, ignorando os PIDs já atribuídos.
Existe alguma chance de o pid do novo processo ser menor que o existente? Eu tenho um processo daemon que irá reiniciar quando ser morto, eu gravei os pids, e descobriu que o pid primeiro ficou menor e depois ficou maior.
qual é o motivo possível?
=============================================== ================
desculpa por perguntar ao & obrigado pelas respostas.
Acho que encontrei a resposta. / proc / sys / kernel / pid_max mostra 32768 (sistema operacional Android em um telefone), no teste de longa data, ele deve ter excedido isso e realocado. Obrigado novamente.
No Linux, os PIDs são atribuídos em ordem, mas eventualmente o sistema atingirá seu limite de PID e recomeçará, ignorando os PIDs já atribuídos.
Eu achei que os PIDs foram atribuídos aleatoriamente, para evitar que invasores adivinhassem nomes de arquivos temporários, que normalmente têm uma representação de string do PID do processo neles. Mas eu estava errado. Eu escrevi o seguinte pequeno programa C e o executei no RHEL 5, x86_64, para verificar:
#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;
}
O maior PID numérico que eu consegui foi 32767, 2 ^ 15-1, o que pode caber em um short assinado de 2 bytes. Eu serei o tio de um macaco.
Remove a previsibilidade, que é um problema de segurança.
Isso é normal. Quando um novo processo é iniciado, ele tem um novo ID de processo, mas não precisa ser maior.