Skip to content
Latchkey

O Que É um Background Job? Rodando Comandos Concorrentemente

Um background job é um comando lançado com um & no final para que o shell não espere que ele termine e possa rodar outros comandos enquanto isso.

Às vezes você quer que um comando continue rodando enquanto faz outra coisa, como iniciar um servidor antes de rodar testes contra ele. Adicionar & a um comando faz o shell lançá-lo em segundo plano e seguir em frente. No CI isso é útil mas arriscado: se você não esperar por um background job corretamente, pode perder sua falha.

O que é um background job

Adicionar & a um comando diz ao shell para iniciá-lo e retornar imediatamente ao prompt, em vez de bloquear até ele terminar. O job continua rodando como um processo separado.

Primeiro plano versus segundo plano

Um comando em primeiro plano segura o shell até sair. Um comando em segundo plano libera o shell imediatamente, então você pode rodar mais comandos enquanto ele trabalha. O shell rastreia background jobs e dá a cada um um número de job.

Gerenciando background jobs

  • jobs lista os background jobs atuais.
  • wait bloqueia até um background job terminar.
  • $! guarda o process ID do background job mais recente.

A pegadinha do exit code

A falha de um background job não faz o script falhar automaticamente, porque o shell não esperou por ele. Você precisa dar wait no job e verificar seu exit code, ou um servidor de segundo plano que travou pode passar despercebido.

Background jobs no CI

Um padrão comum é iniciar um servidor em segundo plano, rodar testes, depois pará-lo. A armadilha é esquecer de dar wait ou de verificar se o servidor realmente iniciou, o que leva a falhas confusas onde testes rodam contra nada.

Concorrência confiável em runners gerenciados

Nos runners da Latchkey, um servidor de segundo plano vive apenas pela duração do job. Faça polling de um readiness check antes de testar e dê wait no job no final para que um processo de segundo plano que travou apareça como uma falha real.

Principais conclusões

  • Um background job roda com & para que o shell continue sem esperar.
  • Use wait e $! para rastrear e verificar o resultado de um background job.
  • No CI, sempre espere e verifique background jobs ou falhas passarão despercebidas.

Guias relacionados