Seu script não está funcionando, não porque "./myprogram" esteja esperando que seu script termine, mas porque "./myprogram" está aguardando que o "gato" indefinido termine o início em sua subshell "(.. .) ".
Mesmo que sua pergunta seja muito vaga, acredito que você precise aprender a usar cachimbos.
mkfifo mypipe
while true; do
./periodic.sh > mypipe &
./myprogram < mypipe
done
Este código irá sempre aguardar sua entrada para "./periodic.sh", uma vez que você forneça isso, ele será passado para o pipe "mypipe" (em segundo plano), então "./myprogram" irá processá-lo saída.
Espero que seja isso que você está procurando. Como eu disse antes, sua pergunta é um pouco vaga.
Divirta-se.