O Que É um Processo? Um Programa em Execução Explicado
Um processo é uma instância em execução de um programa, com sua própria memória, file descriptors e ambiente, gerenciado pelo sistema operacional.
Um programa é apenas um arquivo em disco; um processo é o que você obtém quando o sistema operacional o carrega e executa. Cada comando em um script de CI se torna um processo: ele recebe sua própria memória, herda um ambiente de seu pai e reporta um exit code quando termina. Esse modelo sustenta quase tudo o que o shell faz.
Programa versus processo
Um programa é o arquivo estático; um processo é a versão viva e em execução dele. Você pode rodar o mesmo programa muitas vezes, cada uma como um processo separado com seu próprio estado.
O que um processo tem
- Seu próprio espaço de memória (o heap e a stack).
- Um conjunto de file descriptors abertos, incluindo stdin, stdout, stderr.
- Uma cópia das variáveis de ambiente que herdou.
- Um process ID (PID) que o SO usa para rastreá-lo.
Pais e filhos
Processos formam uma árvore. Quando o shell roda um comando, ele cria um processo filho que herda o ambiente do shell. O filho retorna um exit code ao pai quando termina.
Como processos terminam
Um processo termina ao finalizar normalmente e retornar um exit code, ou ao receber um signal que o para. De qualquer forma, o SO recupera sua memória e recursos.
Processos no CI
Cada comando em um passo é um processo. Limites de memória e CPU se aplicam por processo, então um processo de build que cresce demais pode ser morto pelo SO, aparecendo como um passo com falha em vez de um lento.
Isolamento de processos em runners gerenciados
Nos runners da Latchkey, os processos do seu job rodam em um ambiente isolado com CPU e memória definidas. Dimensionar corretamente o runner dá aos processos de build pesados a folga que precisam para evitar mortes por falta de memória.
Principais conclusões
- Um processo é uma instância em execução de um programa com sua própria memória e recursos.
- Processos formam uma árvore pai-filho e herdam o ambiente de seu pai.
- No CI, cada comando é um processo sujeito a limites de CPU e memória por processo.