como esperar em segundo plano?

0

Eu tenho dois trabalhos em segundo plano com os ID 1 e 2. Eu quero fazer algo quando o trabalho 1 estiver pronto, mas não quero travar.

Atualmente, o que eu obtenho é wait 1 && do whatever , mas esse comando bloqueia o shell atual. Eu quero deixar o wait rodar em segundo plano. Eu tentei wait 1 & && do whatever no zsh mas não funciona. Eu recebo um erro: zsh: parse error near '&&' .

Nota: é importante que eu espere em segundo plano em vez de esperar que alguns trabalhos em segundo plano sejam feitos .

    
por 游凯超 16.07.2018 / 05:00

2 respostas

3

O erro de sintaxe é porque ambos & e && são separadores de comandos. & inicia o comando em segundo plano e imediatamente executa o próximo, enquanto && executa o primeiro comando, aguarda que ele termine e executa o segundo comando se o primeiro for bem-sucedido.

Para contextualizar duas coisas que você deseja executar de forma assíncrona a uma terceira coisa, use este padrão:

( first_thing && second_thing ) &
third_thing

Opcionalmente wait $! após third_thing para concluir os dois primeiros antes de continuar.

wait 1 espera que o PID 1 termine, o que é improvável que aconteça enquanto o shell está em execução. Você vai querer wait %1 , que espera por especificação de trabalho 1.

    
por 16.07.2018 / 05:05
0

Acho que wait não é a resposta. De acordo com isso , tail é uma solução melhor. Eu deveria usar ( tail --pid=WHATEVER -f /dev/null && do whatever ) &

    
por 16.07.2018 / 07:04