Usando o Comando wait para Sincronizar Processos
Nesta etapa, você aprenderá como usar o comando wait para sincronizar processos, fazendo com que o processo pai espere a conclusão dos processos em segundo plano.
O que é o Comando wait?
O comando wait é usado em scripts de shell para pausar a execução do script até que um ou mais processos em segundo plano sejam concluídos. Isso é particularmente útil quando você precisa garantir que certas tarefas terminem antes de prosseguir com operações subsequentes.
Usando wait Sem Argumentos
Quando usado sem argumentos, o comando wait espera que todos os processos em segundo plano sejam concluídos.
Vamos criar um script que demonstra isso:
-
Navegue até o diretório do seu projeto:
cd ~/project
-
Crie um novo script:
nano wait_demo.sh
-
Adicione o seguinte conteúdo ao script:
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks
./long_task.sh &
./long_task.sh &
echo "Waiting for all background tasks to complete..."
wait
echo "All background tasks have completed!"
-
Salve e saia do editor pressionando Ctrl+O, depois Enter e, finalmente, Ctrl+X.
-
Torne o script executável:
chmod +x wait_demo.sh
-
Execute o script:
./wait_demo.sh
Você verá uma saída semelhante a:
Starting background tasks...
Starting long task with PID 1236
Starting long task with PID 1237
Waiting for all background tasks to complete...
Long task completed
Long task completed
All background tasks have completed!
Observe que a mensagem "All background tasks have completed!" (Todas as tarefas em segundo plano foram concluídas!) só aparece depois que ambas as tarefas longas terminaram. Isso demonstra como o comando wait pausa o script até que todos os processos em segundo plano sejam concluídos.
Usando wait com um PID Específico
Você também pode usar wait para esperar por um processo específico, fornecendo seu PID:
-
Crie outro script:
nano wait_pid_demo.sh
-
Adicione o seguinte conteúdo:
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks and capture their PIDs
./long_task.sh &
pid1=$!
./long_task.sh &
pid2=$!
echo "First process PID: $pid1"
echo "Second process PID: $pid2"
echo "Waiting for the first task to complete..."
wait $pid1
echo "First task has completed!"
echo "Waiting for the second task to complete..."
wait $pid2
echo "Second task has completed!"
-
Salve e saia do editor pressionando Ctrl+O, depois Enter e, finalmente, Ctrl+X.
-
Torne o script executável:
chmod +x wait_pid_demo.sh
-
Execute o script:
./wait_pid_demo.sh
A saída mostrará que o script espera por cada processo individualmente.
A variável $! contém o PID do processo em segundo plano executado mais recentemente. Isso permite que você capture e use posteriormente o PID com o comando wait.