Use trap ' ' INT antes de executar python para informar ao shell para ignorar SIGINT e trap - INT para restaurar o comportamento padrão:
memcache_start
mongodb_start
trap ' ' INT
python fg
trap - INT
memcache_stop
mongodb_stop
Após a linha trap ' ' INT , o shell é instruído a ignorar SIGINT, mas python não é afetado por isso. Então, quando você apertar Ctrl + C , python fecha normalmente, mas o shell continua, executando os demais comandos de limpeza do seu script. O segundo comando, trap - INT não é estritamente necessário, ele permite que você use Ctrl + C novamente para parar o processo de limpeza. Ou seja, se você enviar SIGINT para memcache_stop , o shell não tentará executar mongodb_stop e simplesmente sairá.
Aqui é um artigo detalhado descrevendo como o SIGINT / SIGQUIT é tratado pelos shells.