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.