A maneira mais simples é usar $!
. Esse é o PID do último processo lançado em segundo plano (de man bash
):
!
Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bg builtin.
Então, você poderia fazer algo como:
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
pid=$!
[ main script here]
if [any-condition]; then
kill $pid
fi
No entanto, não posso deixar de pensar que esta é uma maneira bastante complicada de fazer as coisas. Eu poderia lhe dar um exemplo mais específico se você mostrasse todo o seu roteiro, mas por que não algo como:
long_process &
while ps -p $! >/dev/null; do sleep 3; echo; echo; fortune; done
Isso permitiria que você iniciasse qualquer processo que demorasse tanto e executaria fortune
até o fim.