Eu pensei que estaria de férias mas não estou, então o curso foi adiado para Dezembro quando então poderei descansar carregando pedras...
Voltando ao nosso background, vc não precisa, nem deve fazer uma monitoria constante pois isso onera significativamente o processamento. O melhor seria escrever uma função (digamos TestaBG) onde vc testaria com um ps | grep se o seu prg ainda está vivo e faria o seguinte:
PidBG=999999999
function TestaBG
{
ps aux | grep -Eq '"\b$PidBG\b
return $?
}
export -f TestaBG
trap "TestaBG || echo prg encerrado; exit" 17
./scr.sh &
PidBG=$!
Isso pq o sinal 17 é ativado qdo um processo filho termina, como pipe, Command Substitution, parênteses e mais uma pá de coisas, criam subshells, a cada sinal 17 ativado vamos verificar se foi o teu processo em bg que morreu de morte morrida.
Outra forma de fazer isso é com o cmd wait.