Os processos Linux formam relações entre pais e filhos. Um shell normalmente inicia um comando externo criando um processo filho e fazendo esse filho executar o programa solicitado. A explicação clássica separa esse trabalho nas operações fork e exec.
Processos · Lição 4
Criação de Processos
Aprenda como fork, exec, PIDs e relações de parentesco participam da criação de processos no Linux.
Criação de um Filho com `fork`
A chamada de sistema fork() cria um processo filho com base no processo solicitante. O pai e o filho continuam a partir do ponto de retorno de fork, mas recebem valores de retorno diferentes e possuem PIDs distintos.
O filho recebe um estado de processo logicamente separado. Inicialmente, o Linux pode compartilhar páginas de memória física usando copy-on-write, copiando uma página somente quando um dos processos a modifica. Os descritores de arquivos abertos são herdados e apontam para as mesmas descrições de arquivos abertos subjacentes, portanto detalhes como os offsets dos arquivos podem continuar compartilhados.
O que uma chamada fork() bem-sucedida cria?
Substituição de um Programa com `execve`
Uma chamada execve() carrega um novo programa no processo solicitante. Quando bem-sucedida, ela substitui a imagem do processo e não retorna ao programa antigo. O PID permanece o mesmo porque execve() não cria um novo processo.
Por isso, muitos comandos do shell seguem um padrão fork-exec:
- O shell cria um processo filho.
- O filho prepara redirecionamentos e outros estados de execução.
- O filho executa o programa solicitado.
- O shell aguarda ou continua, dependendo da execução em primeiro ou segundo plano.
Bibliotecas e aplicações podem expor interfaces de nível superior, como posix_spawn(), e o Linux possui primitivas adicionais, como clone(). O conhecido modelo fork-exec continua sendo útil sem ser a única interface possível.
O que acontece com o PID de um processo após um execve() bem-sucedido?
Inspeção dos IDs de Pais e Filhos
PID identifica o processo, enquanto PPID identifica seu pai. Solicite esses campos explicitamente:
$ ps -o pid,ppid,stat,cmd
Se um shell iniciar ps, o PID do shell normalmente aparecerá como PPID desse processo ps. O momento importa: processos de curta duração podem terminar antes que uma observação separada os capture.
O que PPID representa em uma listagem de processos?
PID 1 e Reparentalização
O kernel inicia o primeiro processo do espaço do usuário com o PID 1. Dependendo do sistema, ele pode ser systemd, outra implementação de init ou um init pequeno dentro de um contêiner ou namespace de PIDs. O PID 1 inicia e supervisiona partes do ambiente do espaço do usuário e possui responsabilidades especiais de sinais e coleta de processos órfãos.
Quando um pai termina antes de seu filho, o filho é reparentalizado para um subreaper apropriado ou para o processo init de seu namespace de PIDs. Ele não precisa terminar apenas porque seu pai original foi encerrado.
Qual afirmação sobre o PID 1 está correta?
O laboratório Gerenciamento e Monitoramento de Processos Linux permite observar os IDs de pais e filhos durante a execução de comandos em primeiro e segundo plano.
Lição concluída
Você concluiu Criação de Processos
Agora você sabe acompanhar a sequência clássica de criação de processos no Linux.
Use
fork()para criar um filho com um PID distinto.Use
execve()para substituir a imagem de um processo sem alterar seu PID.Leia PID e PPID para identificar relações entre pais e filhos.
Reconheça o PID 1 e os subreapers como destinos de filhos reparentalizados.
Salve seu progresso
Crie uma conta gratuita para salvar esta lição e continuar em qualquer dispositivo.
Criar uma conta gratuita