Você pode colocar um processo (ou vários processos) em segundo plano com &
e, posteriormente, no seu script, você pode esperar que todos sejam concluídos, usando o comando bash builtin wait
. Aqui está a sinopse de man bash
:
wait [-n] [n ...]
Wait for each specified child process and return its termination
status. Each n may be a process ID or a job specification; if a
job spec is given, all processes in that job's pipeline are
waited for. If n is not given, all currently active child pro‐
cesses are waited for, and the return status is zero. If the -n
option is supplied, wait waits for any job to terminate and
returns its exit status. If n specifies a non-existent process
or job, the return status is 127. Otherwise, the return status
is the exit status of the last process or job waited for.
Verificar o status de retorno de wait
para um trabalho específico pode fornecer a verificação "se bem-sucedido" que &&
faz, como neste script de teste:
#!/bin/bash
sleep 3 &
s3pid=$!
true &
trpid=$!
false &
fapid=$!
echo "Expecting success next, since true returns 0"
wait $trpid && echo "wait process true success" || echo "wait process true FAIL"
echo "Expecting FAIL next, since false returns 1"
wait $fapid && echo "wait process false success" || echo "wait process false FAIL"
echo "Expecting success next, since wait alone always returns 0"
wait && echo "wait for all success" || echo "wait for all FAIL"
Mas para apenas um comando, usar &&
sozinho seria o mesmo ... E, no caso do solicitante, se você estiver executando um programa do tipo "never stop", ele não terminará & você realmente não quer &&
ou wait