¿Qué sucede cuando haces un background de una function que llama a otra function?

Estoy tratando de averiguar cómo hacer un background de un process en una secuencia de commands que llama a otra function y terminar de manera confiable cuando esté listo. ¿Tendré que moverlo todo en una function?

function dosomething { while : do printsomething "doing something" done } function printsomething { echo $@ } function otherfunction { dosomething & TMP_PID=$! } function killsomething { quit_test=`ps -p "$TMP_PID" | sed '1d' | awk '{print $1}'` if [ "$quit_test" != "" ] ; then (kill $TMP_PID >/dev/null) fi } ## MAIN TMP_PID="" echo "starting program" otherfunction sleep 5s killsomething