Se você quiser eliminar o processo do shell e qualquer outro processo gerado, provavelmente é melhor iniciar um novo grupo de processos ( setpgid() no filho após o fork() antes de executar o execve() no script) e mate o grupo de processos com kill(-pid) , em que pid é o valor de retorno de fork() no pai.
Se chamar setpgid() não for uma opção, você ainda pode fazer isso:
Em vez de:
run("your-script its args");
Faça:
run("set -m; trap 'kill %' TERM; your-script its args & wait")