You would need to intercept the ctrl+c command and manually forward the kill signal to the child. It's probably a bit annoying to do so—I don't think the standard library has any way to catch ctrl+c signals.
Yeah, unfortunately there's a bit of nuance around ctrl-C because of platform-specific quirks and limitations they probably decided to punt on it and let people iterate in the ecosystem first (e.g. you can only communicate with a signal handler via global variables, and you are restricted to async-signal-safe functions - see man 7 signal-safety for more).
I suspect what languages like Python do is register a ctrl-C handler that just sets a global flag and returns, then the main thread periodically checks this flag to see whether it should raise an KeyboardInterrupt.
Rust doesn't benefit from a runtime that can insert these checks automatically, so you either need check the global flag periodically or, like the ctrlc crate, spin up a thread in the background which receives signals and handles them. See nix::sys::signal::signal() for an example.