How do I make a system() exit on control-C?

You can't. You need to imitate the system call (see the perlipc manpage for sample code) and then have a signal handler for the INT signal that passes the signal on to the subprocess.