Esta questão decorre desta recomendação e de uma de suas respostas para ler Linuxtopia - Capítulo 20. Subshells .
Estou um pouco confuso com esta declaração no site Linuxtopia:
subshells permitem que o script faça o processamento paralelo, executando várias subtarefas simultaneamente.
https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/subshells.html
Isso significa que os subshells, executados a partir de um script, são sempre executados em paralelo ao script original? Experimentalmente, isso não parece ser o caso, mas ficaria grato pela confirmação de especialistas de uma forma ou de outra.
#! /usr/bin/bash
# This script reliably prints:
# hello
# world
# 0
# ...implying that the the subshell is not run in parallel with this script.
(echo hello;
echo world)
echo $?
.
#! /usr/bin/bash
# This script prints:
# 0
# hello
# world
# ...implying that the the subshell is run in parallel with this script.
(echo hello;
echo world) &
echo $?
É o uso do &
que o site Linuxtopia pode ter significado por " [deixar] o script fazer processamento paralelo "?
Nota: Estou familiarizado com o conceito de comandos com sufixo &
no bash... ele executa o referido comando como um processo em segundo plano. Portanto, minha pergunta é mais sobre se os comandos executados em um subshell são executados como processo em segundo plano/paralelo por padrão ou se a adição do &
aqui também é o que causa a execução em segundo plano/paralelo. A redação do artigo Linuxtopia, para mim, implicava o primeiro, que não parece corresponder à observação.
Depende de como você cria o subshell.
( command )
será executadocommand
em um subshell e aguardará a conclusão do subshell antes de continuar.command &
será executadocommand
em um subshell em segundo plano. O shell continuará para o próximo comando sem esperar que o subshell termine. Isso pode ser usado para processamento paralelo.coproc command
é semelhante acommand &
, mas também estabelece um tubo de duas vias entre o shell principal e o subshell.