Por que os valores de PID não são contínuos?

14

Se digitarmos ps -ef , obteremos uma lista de processos. Por que os números PID não são contínuos?

    
por Vasu Dev Garg 23.07.2015 / 09:59

4 respostas

16

No Ubuntu eles são contínuos. Em outros sistemas operacionais, pode ser diferente.

O kernel aloca PIDs no intervalo de (RESERVED_PIDS, PID_MAX_DEFAULT). Ele faz isso sequencialmente em cada namespace (tarefas em diferentes namespaces podem ter os mesmos IDs). Caso o intervalo esteja esgotado, a atribuição de pid envolve.

( link )

Mente embora ...

  • O agendamento do kernel pode bifurcar um processo para que pareça pular números.
  • Um PID desaparecerá quando essa tarefa terminar.
  • Os PIDs não são reutilizados até que PID_MAX_DEFAULT seja atingido.
  • Um PID reservado é ignorado.

Alguns tópicos em stackoverflow:

Nos comentários é um comando para testar a atribuição de PIDs:

for i in {1..20}; do sh -c 'echo $$'; done
    
por Rinzwind 23.07.2015 / 10:12
8

Os IDs do processo que faltam entre eles já estão mortos e seus PIDs serão reutilizados pelo kernel nos processos posteriores.

Os processos mortos não serão mostrados na tabela de processos (exceto para zumbis), portanto, ps -ef não os mostrará.

    
por heemayl 23.07.2015 / 10:08
3

Normalmente, o PID é contínuo, mas alguns processos acabarão quando você executar o comando ps -ef .

Além disso, alguns processos podem ser apenas um subprocesso de outro processo que não é mostrado no comando ps -ef . Para ver algum resultado expandido e você pode verificar o PID contínuo use o pstree

pstree -p

Exemplo de saída:

   ├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│                   ├─{teamviewerd}(3475)
│                   ├─{teamviewerd}(3476)
│                   ├─{teamviewerd}(3477)
│                   ├─{teamviewerd}(3478)

enquanto, se você executar ps -ef , verá apenas o processo pai.

$ ps -ef | grep teamviewerd
root      3468     1  0 Jul15 ?        00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f
    
por Maythux 23.07.2015 / 10:09
2

Eles são contínuos. O PID é atribuído em ordem seqüencial até o limite máximo ser atingido. Depois desse limite, ele recomeçará do zero.

Portanto, é só que os PIDs ausentes em ps -ef são de processos mortos. Observe que ps -ef lista apenas os processos em execução.

    
por 7171u 23.07.2015 / 10:09