diff --git a/cli/task_runner.rs b/cli/task_runner.rs index aabdaf5777..d6589a1832 100644 --- a/cli/task_runner.rs +++ b/cli/task_runner.rs @@ -585,7 +585,13 @@ pub async fn run_future_forwarding_signals( async fn listen_ctrl_c(kill_signal: KillSignal) { while let Ok(()) = tokio::signal::ctrl_c().await { - kill_signal.send(deno_task_shell::SignalKind::SIGINT) + // On windows, ctrl+c is sent to the process group, so the signal would + // have already been sent to the child process. We still want to listen + // for ctrl+c here to keep the process alive when receiving it, but no + // need to forward the signal because it's already been sent. + if !cfg!(windows) { + kill_signal.send(deno_task_shell::SignalKind::SIGINT) + } } }