That happens because pressing CTRL-C at the terminal does not send the kill signal just to the process but to the full process group.
The workaround is to get setpgrp called between the fork and exec calls used internally to spawn the process... and that probably means writing your own spawn method.
Comment on Re: INT signal kills process run with expect, when $SIG{'INT'} is set