esperar
é um comando que espera que as tarefas fornecidas sejam concluídas e retorna o status de saída do comando esperado.
Desde o esperar
comando afeta o ambiente de execução do shell atual, ele é implementado como um comando embutido na maioria dos shells.
Neste artigo, vamos explorar o Bash integrado esperar
comando.
Bash esperar
Comando #
A sintaxe geral do esperar
integrado tem o seguinte formato:
aguarde [opções] ID
EU IA
é o processo ou ID do trabalho. Se não EU IA
for especificado, o comando espera até que todos os trabalhos filhos em segundo plano sejam concluídos.
O esperar
comando retorna o status de saída do último comando esperado.
Por exemplo, para esperar por um processo em segundo plano com PID 7654
, você usaria:
espere 7654
Quando vários processos são fornecidos, o comando espera que todos os processos sejam concluídos.
Os trabalhos são especificados usando a especificação do trabalho (“jobspec”), que é uma forma de se referir aos processos que compõem o trabalho. Um jobpec começa com um símbolo de porcentagem seguido pelo número do trabalho (% n
). Aqui está um exemplo:
Execute um comando em segundo plano:
rsync -a / home / tmp / home &
O ID do trabalho shell (entre colchetes) e o ID do processo serão exibidos em seu terminal:
[2] 54377
Para esperar pelo trabalho, execute o esperar
comando seguido da especificação do trabalho:
espere% 2
Quando invocado com o -n
opção, o comando espera apenas por um único trabalho dos pids ou jobspecs fornecidos para ser concluído e retorna seu status de saída. Se nenhum argumento for fornecido, espere -n
aguarda a conclusão de qualquer trabalho em segundo plano e retorna o status de saída do trabalho.
esperar -n 45432 54346 76573
No exemplo acima, espere -n
imprime apenas o status de retorno do trabalho que sai primeiro; não mostra o PID do trabalho. Se você deseja obter o trabalho pid ou jobspec para o qual o status de saída é retornado, use o -p
opção de atribuí-lo a uma variável:
wait -p job_id -n 45432 54346 76573
-p
opção foi introduzida no Bash 5.1. Se você usar uma versão mais antiga do Bash, receberá um erro de “opção inválida”.
O -f
opção diz esperar
esperar que cada pid ou jobpec termine antes de retornar seu código de saída, em vez de retornar quando o status do trabalho for alterado. Esta opção só é válida quando o controle de trabalho está habilitado. Por padrão, o controle de tarefas é habilitado apenas para prompts interativos.
Exemplos #
esperar
é normalmente usado em scripts de shell que geram processos filhos que são executados em paralelo.
Para ilustrar como o comando funciona, crie o seguinte script:
#!/ bin / bash sleep 30 & process_id = $! echo "PID: $ process_id" wait $ process_id echo "Status de saída: $?"
Vamos explicar o código linha por linha:
- A primeira linha é chamada shebang e diz ao sistema operacional qual interpretador usar para analisar o resto do arquivo.
- Estamos usando o
dormir
comando para emular um processo demorado em segundo plano. $!
é uma variável Bash interna que armazena o PID do último trabalho executado em segundo plano. Neste exemplo, esse é o PID dodormir
comando. Estamos armazenando o PID em uma variável (process_id
).- Imprime o número PID.
- O PID é passado para o
esperar
comando que espera até odormir
comando completo. - Imprime o status de saída do
esperar
comando.$?
é uma variável Bash interna que contém o status de saída do último comando executado.
Se você executar o script, ele imprimirá algo assim:
PID: 36353 Status de saída: 0
Aqui está um exemplo usando o -n
opção:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Primeiro trabalho concluído."wait echo" Todos os trabalhos concluídos."
Quando o script é executado, ele gera 3 processos em segundo plano. espere -n
espera até que o primeiro trabalho seja concluído e a declaração de eco seja impressa. esperar
aguarda a conclusão de todos os trabalhos de segundo plano filho.
primeiro trabalho concluído todos os trabalhos concluídos
O último exemplo explica o -f
opção. Abra o terminal e execute:
dormir 3600 e
[1] 46671
Aguarde o processo:
espere 46671
Abra outro terminal e pare o processo com o mate
comando:
kill -STOP 46671
Uma vez que o status do processo é alterado, o esperar
o comando será concluído e retornará o código de saída do processo.
Agora, repita os mesmos passos, mas desta vez use espere -f $ pid
:
dormir 3600 e
esperar -f 46671
Pare o processo do outro terminal:
kill -STOP 46671
Desta vez o esperar
o comando não vai completar. Será executado até o dormir
processo termina.
Conclusão #
O esperar
comando espera que os trabalhos especificados sejam concluídos e retorna o código de saída do trabalho.
Se você tiver alguma dúvida ou feedback, fique à vontade para deixar um comentário.