Matar todos os processos filhos em um script de shell

Eu escrevi um script de shell iniciando alguns processos em segundo plano e precisava ter certeza de matá-los todos ao sair. Acontece que não é tão fácil quanto se poderia esperar. Isso é o que acabei fazendo:

Primeiro você precisa capturar alguns sinais para executar uma função de desligamento. Nessa função, primeiro precisamos obter nosso id de grupo de processo, em seguida, eliminar o grupo de processo completo em um novo grupo de processo para que não corramos o risco de nos matar:

#!/bin/bash
shutdown
() {
# Get our process group id
PGID
=$(ps -o pgid= $$ | grep -o [0-9]*)

# Kill it in a new new process group
setsid kill
-- -$PGID
exit 0
}

trap
"shutdown" SIGINT SIGTERM
... # start gazillion of background processes here