init process: ancestral de todos os processos?

25

Eu sempre aprendi que o processo init é o ancestral de todos os processos. Por que o processo 2 tem um PPID de 0?

$ ps -ef | head -n 3
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May14 ?        00:00:01 /sbin/init
root         2     0  0 May14 ?        00:00:00 [kthreadd]
    
por Mathieu Larose 16.05.2011 / 22:53

1 resposta

29

Primeiro, "ancestral" não é a mesma coisa que "pai". O ancestral pode ser o pai dos pais, o pai dos pais, e o kernel apenas controla um nível. No entanto, quando um processo morre, seus filhos são adotados pelo init, então você verá muitos processos cujo pai é 1 em um sistema típico.

Os sistemas Linux modernos também possuem alguns processos que executam o código do kernel, mas são gerenciados como processos do usuário, no que se refere ao agendamento. (Eles não obedecem às regras usuais de gerenciamento de memória, já que estão executando o código do kernel.) Esses processos são gerados por kthreadd (é o init dos encadeamentos do kernel). Você pode reconhecê-los pelo ID de processo pai (2) ou, geralmente, pelo fato de ps listá-los com um nome entre colchetes ou pelo fato de que /proc/2/exe (normalmente um link simbólico para o executável do processo) pode seja lido.

Os processos 1 ( init ) e 2 ( kthreadd ) são criados diretamente pelo kernel no momento da inicialização, para que não tenham um pai. O valor 0 é usado em seu campo ppid para indicar isso. Pense em 0 como significando "o próprio kernel" aqui.

O Linux também tem algumas facilidades para o kernel iniciar processos de usuários cuja localização é indicada através de um parâmetro sysctl em certas circunstâncias . Por exemplo, o kernel pode acionar eventos de carregamento do módulo (por exemplo, quando um novo hardware é descoberto ou quando alguns protocolos de rede são usados pela primeira vez) chamando o programa no valor kernel.modprobe sysctl. Quando um programa despeja o núcleo, o kernel chama o programa indicado por kernel.core_pattern se houver.

    
por 16.05.2011 / 23:00