Você está colocando uma armadilha em todos esses sinais:
trap 'exec_func' INT TERM EXIT SIGKILL
que faz com que o exec_func
em INT
(ctrl-C) e novamente em EXIT
(fim do script).
Escolha apenas um (se for isso que você precisa) como INT
trap 'exec_func' INT
Ou identifique qual sinal está sendo capturado semelhante a este e use uma declaração de caso para decidir o que fazer.