Controle de trabalhos (Unix)

Em sistemas operacionais Unix e tipo Unix, controle de trabalhos (job control) é o controle, especialmente interativo, realizado por um shell no qual os "trabalhos" são uma representação para um grupo de processos para o shell. Recursos básicos de controle de trabalho são a suspensão, resumo ou terminação para todos os processos no grupo de trabalhos/processos. Recursos mais avançados podem ser realizados por meio do envio de sinais ao trabalho. O controle de trabalhos é de interesse particular no Unix devido ao seu multiprocessamento,[1] e deve ser distinguido do controle de trabalhos mais geral, que é aplicado frequentemente à execução sequencial (processamento em lote).

Visão geral

editar

Ao usar sistemas operacionais Unix ou tipo Unix por meio de um terminal (ou emulador de terminal), um usuário terá, inicialmente, apenas um único processo em execução, o seu shell de login. A maioria das tarefas (listagem de diretórios, edição de arquivos, etc.) pode ser facilmente executada, permitindo que o programa assuma o controle do terminal e retornando o controle ao shell quando o programa finaliza - formalmente, anexando a entrada padrão e saída padrão ao shell, que lê ou grava a partir do terminal, e captura sinais enviados do teclado, como o sinal de terminação resultante do pressionamento das teclas Control + C.

No entanto, às vezes, o usuário deseja realizar uma tarefa enquanto usa o terminal para outra finalidade. Uma tarefa que está sendo executada, mas não está recebendo entrada do terminal, está sendo executada "em segundo plano", enquanto a tarefa única que está recebendo entrada do terminal está "em primeiro plano". O controle de trabalhos é uma facilidade desenvolvida para tornar isso possível, permitindo que o usuário inicie processos em segundo plano, envie processos em execução para o segundo plano, traga processos em segundo plano para o primeiro plano e suspenda ou encerre processos.

O conceito de um trabalho mapeia o conceito (de shell) de um único comando de shell para o conceito (de sistema operacional) dos possivelmente muitos processos que o comando envolve. Tarefas de vários processos acontecem porque os processos podem criar processos filhos adicionais e um único comando de shell pode consistir de um encadeamento de vários processos que se comunicam. Por exemplo, um comando para selecionar linhas contendo o texto "título", ordená-las alfabeticamente e exibir o resultado em um paginador.

grep título arquivo.txt | sort | less

Isso cria pelo menos três processos: um para grep, um para sort e um para less. O controle de trabalhos permite que o shell controle esses processos relacionados como uma entidade e, quando um usuário emite a combinação de chaves apropriada (geralmente Control + Z), todo o grupo de processos é suspenso.

Os trabalhos são gerenciados pelo sistema operacional como um único grupo de processos e o trabalho é a representação interna do shell de tal grupo. Isso é definido no POSIX como:[2]

Um trabalho pode ser referido por um handle chamado de job control job ID (ID de trabalho de controle de trabalho) ou simplesmente job ID (ID de trabalho), que é usado pelos comandos internos do shell para se referir ao trabalho. Os IDs de trabalho começam com o caractere %. %n identifica o trabalho n, enquanto que %% identifica o trabalho atual. Outros IDs de trabalho são especificados pelo POSIX.[3] Em uso informal, o número pode ser chamado de "número do trabalho" ou "ID do trabalho" e a documentação do Bash refere-se ao ID do trabalho (prefixado com %) como o jobspec.[4]

Normalmente, o controle de trabalhos e os IDs de trabalho são usados ​​apenas no uso interativo, onde simplificam a referência aos grupos de processos. Entretanto, em scripts são usados os PGIDs, pois são mais precisos e robustos e, de fato, o controle de trabalhos é desabilitado por padrão nos scripts bash.

Ver também

editar

Referências

Ligações externas

editar


  Este artigo sobre Unix é um esboço. Você pode ajudar a Wikipédia expandindo-o.