Pular para o conteúdo principal

Questão de Sistemas Operacionais — Scripts em Unix e Linux — VUNESP 2023

Sistemas OperacionaisScripts em Unix e Linux
Código
vu197296
Banca
VUNESP
Órgão
UNICAMP
Ano
2023
Cargo
PTIC ( )
Um usuário deseja executar um arquivo shell script em background. Considerando que o arquivo possui o nome exec.sh, para tal ele deverá executar no terminal o comando:
  1. Aexec.sh &
  2. Bexec.sh &&
  3. Cexec.sh |
  4. Dexec.sh ||
  5. Eexec.sh ~
Revelar gabarito e comentário

GabaritoA — exec.sh &

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Execução de scripts em background no Linux

Gabarito: letra A. Para executar um arquivo shell script em background no terminal Linux, basta adicionar o caractere & (e comercial) ao final do comando, como em exec.sh &. Esse operador faz o shell não aguardar a conclusão do processo, devolvendo o prompt imediatamente ao usuário — comportamento descrito na literatura de sistemas operacionais como a forma de iniciar uma tarefa em segundo plano.

O shell (interpretador de comandos) é o programa que intermedeia a interação entre o usuário e o kernel. Quando você digita um comando, o shell cria um processo filho para executá-lo e, por padrão, espera que esse processo termine antes de exibir um novo prompt. Esse comportamento é chamado de execução em primeiro plano (foreground). Para liberar o terminal e continuar trabalhando enquanto o script roda, é preciso executá-lo em segundo plano (background), o que é feito justamente com o operador &.

O trecho abaixo, extraído de um clássico livro de sistemas operacionais, explica exatamente esse mecanismo:

Sistemas Operacionais Modernos (Tanenbaum):

"Se um usuário coloca um & após um comando, o shell não espera que ele termine. Em vez disso, ele dá um prompt imediatamente. Em consequência, cat file1 file2 file3 | sort >/dev/lp & inicia o sort como uma tarefa de segundo plano, permitindo que o usuário continue trabalhando normalmente enquanto o ordenamento prossegue."

Na prática, ao digitar exec.sh &, o shell inicia o script como um processo em background e retorna o controle ao terminal. O usuário pode, então, digitar outros comandos normalmente. O processo continua rodando até terminar, e o shell informa seu PID (identificador de processo) para que o usuário possa gerenciá-lo (por exemplo, com kill).

É importante distinguir o & de outros operadores que também aparecem nas alternativas, pois cada um tem uma função completamente diferente:

Operador

Função

Exemplo

&

Executa o comando em background (segundo plano)

exec.sh &

&&

Executa o segundo comando somente se o primeiro tiver sucesso

exec.sh && echo ok

|

Conecta a saída de um comando à entrada de outro (pipe)

cat arquivo | grep texto

||

Executa o segundo comando somente se o primeiro falhar

exec.sh || echo falhou

~

Representa o diretório home do usuário

cd ~

A pegadinha desta questão é justamente a confusão entre & (background) e && (E lógico). A banca troca um caractere e muda completamente o significado: && não tem nada a ver com segundo plano — é um operador de controle que encadeia comandos condicionalmente. O candidato que não domina esses operadores pode facilmente marcar a alternativa B, achando que o && é a forma de "executar em background".

Guarde a fronteira: & = background; && = E lógico; | = pipe; || = OU lógico; ~ = home. É exatamente nessa distinção que as alternativas se dividem.

Alternativa A — ✅ Correta ⟵ GABARITO

O comando exec.sh & executa o script em background. O & ao final instrui o shell a não aguardar a conclusão do processo, devolvendo o prompt imediatamente. É exatamente o que o enunciado pede.

Alternativa B — ❌ Incorreta

exec.sh && é um comando incompleto e semanticamente errado. O operador && é um E lógico que exige um segundo comando após ele (ex.: exec.sh && echo ok). Sozinho, ele não executa nada em background — na verdade, sem o segundo comando, o shell nem executa o script, pois && aguarda o próximo comando para decidir se o executa. A banca troca & por && para confundir quem não domina os operadores de controle.

Alternativa C — ❌ Incorreta

exec.sh | é um pipe incompleto. O | conecta a saída padrão de um comando à entrada padrão de outro (ex.: exec.sh | grep erro). Sozinho, sem um segundo comando, ele não tem função e não executa o script em background. O pipe é usado para encadear comandos, não para segundo plano.

Alternativa D — ❌ Incorreta

exec.sh || é um OU lógico incompleto. O || executa o segundo comando somente se o primeiro falhar (ex.: exec.sh || echo falhou). Sozinho, não tem efeito e não executa o script em background. É o oposto do &&: enquanto && exige sucesso, || exige falha.

Alternativa E — ❌ Incorreta

exec.sh ~ usa o til (~), que representa o diretório home do usuário (ex.: cd ~). Ele não é um operador de execução nem de background. Colocá-lo após o nome do script não tem efeito algum — o shell tentaria executar exec.sh com um argumento ~, o que não é o que se deseja.

NÃO CAIA NESSA!

A banca explora a troca de & por &&. O candidato que confunde os dois marca a letra B, achando que o && é a forma de "executar em background". Lembre-se: & é o operador de segundo plano; && é o E lógico que encadeia comandos condicionalmente. Com treino, você enxerga essas trocas de longe 💪.

PEGA ESSA DICA!

Para fixar, decore a tabela dos operadores do shell: & (background), && (E lógico), | (pipe), || (OU lógico), ~ (home). Em provas, quando a questão pedir "executar em background", procure o & sozinho — nunca acompanhado de outro &.

Gabarito: letra A

Link permanente: /questoes/vu197296