Skip to main content

Subshells Bash e Processamento Paralelo

Datar JPG com data da foto (EXIF) em shell script (exiftool touch grep cut tr sed) — Tela Preta #1 (Pode 2025)

Datar JPG com data da foto (EXIF) em shell script (exiftool touch grep cut tr sed) — Tela Preta #1 (Pode 2025)
Anonim

Um shell é uma interface básica para inserir comandos em um sistema Linux. Com ele, você pode inserir um comando diretamente ou especificar um arquivo (script) que contenha uma seqüência de comandos a serem executados. Os shells são organizados em uma hierarquia e qualquer shell pode criar um novo shell. O novo shell é considerado um processo filho - um subshell - do shell pai que o cria.

Por padrão, uma subshell depende de seu pai, no sentido de que, se o processo pai for finalizado, a subshell também será encerrada. Qualquer saída é passada do subshell para o shell pai.

Como criar um subshell

Em um script de shell Bash, você cria um subshell usando a notação parêntese:

No exemplo, o loop while está entre parênteses, o que faz com que seja executado em uma sub-shell do shell no qual o arquivo de script é executado.

Executando um Subshell em segundo plano

A menos que você especifique que o subshell deve ser executado em segundo plano, o shell pai aguarda a conclusão do subshell antes de continuar com o restante do script. No entanto, se você deseja executar subshells em paralelo, execute-os em segundo plano, o que é realizado com o caractere e comercial após a expressão subshell, conforme mostrado aqui:

Executando Múltiplos Subshells em Paralelo

Se você criar vários subshells como processos em segundo plano, poderá executar tarefas em paralelo. Normalmente, o sistema operacional usa diferentes processadores ou núcleos para cada processo e subprocesso, supondo que haja pelo menos tantos processadores ou núcleos quantos os processos. Caso contrário, as tarefas são atribuídas aos mesmos processadores ou núcleos. Nesse caso, o processador ou núcleo alterna continuamente entre as tarefas atribuídas até que as tarefas sejam concluídas. O próximo exemplo tem dois subprocessos. O primeiro conta de 1 a 99 e o segundo de 1000 a 1099.

Use a instrução de espera para informar ao processo pai que aguarde o término dos subprocessos antes de continuar com o restante do script:

Usos para subshells

Subshells são úteis quando os comandos precisam ser executados em um ambiente ou diretório específico. Se cada comando for executado em um subshell diferente, não haverá risco de que as configurações das variáveis ​​sejam confundidas. Na conclusão, as configurações e o diretório atual não precisam ser restaurados, pois o ambiente do processo pai não é afetado por nenhum de seus subprocessos.

Subshells podem ser usados ​​em definições de funções para que possam ser executados várias vezes com diferentes parâmetros.