você está aqui: Home  → Arquivo de Mensagens

Subshells em scripts bash

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 25 de setembro de 2014

Uma shell script pode criar subprocessos ou subshells. Estas subshells permitem com que o script execute processamento paralelo, realizando na prática diversas tarefas simultaneamente.

As subshells podem ser executadas em paralelo com as tarefas do processo pai. Para executar uma tarefa em paralelo ela deve ser executada em background, da forma tradicional, colocando ao final do comando o caractere "&" (ampersand). Em computadores com múltiplos núcleos o sistema operacional irá distribuir as tarefas pelos processadores disponíveis.

Outra aplicação útil é quando os comandos precisam ser executados em um ambiente com variáveis de ambiente distintas ou em outro diretório. Se cada comando for executado em uma subshell diferente, não existe o risco de se corromper as variáveis de ambiente do processo pai. Ao final da execução da subshell, o processamento continua dentro do ambiente do processo pai, que não foi alterado pela subshell.

No script abaixo temos duas subshells: a primeira conta de 1 a 99 e a segunda conta de 1000 a 1009. As duas subshells são executadas em background e podemos ver, a partir dos resultados obtidos na tela, que as duas são executadas em paralelo.

  #!/bin/bash
  
  echo "Before starting subshell"
  
  ( count=1 
    while [ $count -le 99 ] 
     do 
       echo "$count" 
       sleep 1 
        (( count++ )) 
      done ) & 
  
  ( count=1000 
    while [ $count -le 1099 ] 
     do
       echo "$count"
       sleep 1
       (( count++ )) 
     done ) & 
  
  wait echo "Finished"

Referências



 

 

Veja a relação completa dos artigos de Rubens Queiroz de Almeida

Opinião dos Leitores

Hugo
27 Set 2014, 20:20
Para melhor processamento paralelo em comandos de shell, vejam o projeto gnu parallel.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script