Qual é o valor máximo do ID do processo?

42

Qual é o valor máximo do ID do processo?

Além disso, é possível alterar uma identificação de processo?

Dmitry Kodmov
fonte

Respostas:

61

No Linux, você pode encontrar o valor máximo de PID para o seu sistema com este:

$ cat /proc/sys/kernel/pid_max

Esse valor também pode ser gravado usando o mesmo arquivo, no entanto, o valor só pode ser estendido até um máximo teórico de 32768 para sistemas de 32 bits ou 4194304 para 64 bits:

$ echo 32768 > /proc/sys/kernel/pid_max

Parece ser prática normativa na maioria dos sistemas de 64 bits definir esse valor para o mesmo valor encontrado nos sistemas de 32 bits, mas isso é por convenção e não por um requisito.

De man 5 proc:

/proc/sys/kernel/pid_max  
  This file (new in Linux 2.5) specifies the value at which PIDs wrap around
  (i.e., the value in this file is one greater than the maximum PID). The
  default value for this file, 32768, results in the same range of PIDs as
  on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for
  pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22
  (PID_MAX_LIMIT, approximately 4 million).

E não, você não pode alterar o PID de um processo em execução. Ele é atribuído como um número seqüencial pelo kernel no momento em que o processo é iniciado e é o identificador a partir desse momento. A única coisa que você pode fazer para obter um novo é fazer com que seu código bifurque um novo processo e encerre o antigo.

Caleb
fonte
e podemos ter certeza de bits do kernel com isso
Aquário de energia
2
Um semi-exemplo curioso da história "não é possível alterar o PID" é o caso de um programa multithread, em que um dos threads auxiliares executa um exec (). Sobrepõe todo o processo, mas altera o PID (para o TID do thread de execução).
fche
3
O valor máximo de um PID para a máquina de 32 bits é 32767, não 32768. 0 é o programador e 1 é o init, e, em seguida, os processos de usuário ganha 2 a 32767.
2
user129258 está certo e de acordo com a página do manual e o documento do kernel. O valor máximo permitido de um PID , conforme solicitado pela pergunta, é um menor que o valor nesse pseudo-arquivo.
JdeBP # 20/16
1
@ user129258, isso só se mantém se você estiver usando init. Sempre existe a possibilidade de inicializar diretamente em um shell, digamos busybox e fazer as coisas manualmente a partir daí, sem controle de trabalho. Ou ainda, tenha alguns scripts de inicialização e volte ao shell. Em qualquer caso, o shell será o PID 1 nesse caso.
Tim
9

Outras respostas explicaram

  • /proc/sys/kernel/pid_max para Linux e
  • 99999 para FreeBSD

Mas a pergunta não especificou um sistema operacional. Então, aqui estão alguns outros:

  • No Solaris, o valor máximo de um ID de processo é um parâmetro ajustável do kernel - pidmaxno /etc/system- que padroniza para 30.000 e pode ser definido entre 266 e 999.999. Observe que isso não é max_nprocs, que é um parâmetro ajustável do kernel com uma função sutilmente diferente.
  • No HP-UX 10, os ajustáveis ​​do kernel nomeiam process_id_mine process_id_maxprescrevem o intervalo de IDs de processo permitidos.
  • No AIX, os IDs de processo compreendem vários campos, incluindo um campo "slot de processo" e "contagem de geração". O valor máximo possível é 0x03FFFFFE, porque os campos ocupam apenas os 26 bits inferiores de um número inteiro e o bit # 0 é sempre zero, exceto no processo # 1.
  • No OpenBSD, o máximo é 32766.
  • No NetBSD, o máximo é 30000.
JdeBP
fonte
A partir do OpenBSD 6.5, o máximo agora é 99999, de acordo com a introdução (2), não 32766.
Kaiepi
4

No FreeBSD, o valor do PID está entre 0 e 99999, de acordo com intro(2)(link) . Aqui está uma citação do manual:

ID do processo.
Cada processo ativo no sistema é identificado exclusivamente por um número inteiro não negativo chamado ID do processo. O intervalo desse ID é de 0 a 99999.

Se você deseja ler o código fonte por conta própria, PID_MAXé definido em sys/sys/proc.h(link) .

Mateusz Piotrowski
fonte