Skip to content
Latchkey

O que é um Processo? Um programa rodando em isolamento

Um processo é uma instância de um programa em execução: sua própria memória isolada, file handles e ao menos uma thread de execução, gerenciada pelo sistema operacional.

Quando você inicia um programa, o sistema operacional cria um processo para ele: um contêiner isolado de memória e recursos onde o programa roda. Cada processo é isolado dos outros, então um processo que trava ou se comporta mal não pode corromper diretamente outro. Dentro de um processo, uma ou mais threads fazem o trabalho de fato.

O que um processo contém

Um processo possui um address space (sua visão privada da memória), file descriptors abertos, variáveis de ambiente e ao menos uma thread. O OS rastreia tudo isso e impõe isolamento para que processos não possam ler a memória um do outro sem canais explícitos.

Processo vs thread

Um processo é isolado e pesado, com sua própria memória. Uma thread vive dentro de um processo e compartilha sua memória com irmãs. Processos dão segurança por isolamento; threads dão velocidade por compartilhamento. Muitos sistemas combinam os dois.

Como processos se comunicam

  • Pipes e sockets para transmitir dados entre processos.
  • Segmentos de shared memory para compartilhamento rápido e explícito.
  • Message queues e o filesystem.
  • Exit codes e signals para coordenação grosseira.

Por que o isolamento importa

Como processos não compartilham memória por padrão, um crash em um não corrompe outro, e um memory leak fica limitado a um processo. É por isso que rodar trabalho arriscado ou não confiável em um processo separado é um padrão de segurança comum.

Um exemplo rápido

Cada passo em um pipeline de shell como cat log | grep error | wc -l roda como um processo separado, e o OS conecta a entrada e a saída deles por pipes.

Processos no CI

Um job de CI é em si uma árvore de processos: o runner cria processos de build e de teste e observa seus exit codes. Um exit diferente de zero falha o passo. A Latchkey roda cada job em um ambiente isolado para que um job não possa envenenar o próximo, e distingue um exit não-zero real de uma falha transitória de infraestrutura que vale um retry.

Principais conclusões

  • Um processo é um programa em execução com sua própria memória e recursos isolados.
  • Processos são isolados e seguros; threads dentro deles compartilham memória e são rápidas.
  • Jobs de CI são árvores de processos cujos exit codes decidem passar ou falhar.

Guias relacionados