send_ctrlc

Crates.iosend_ctrlc
lib.rssend_ctrlc
version0.6.0
created_at2025-11-07 00:46:15.687649+00
updated_at2025-11-15 15:36:05.554262+00
descriptionA cross platform crate for sending ctrl-c to child processes
homepage
repositoryhttps://github.com/nu11ptr/send_ctrlc
max_upload_size
id1920912
size20,810
Scott Meeuwsen (nu11ptr)

documentation

https://docs.rs/send_ctrlc

README

send_ctrlc

Crate Docs Build codecov

A cross platform crate for interrupting or terminating child processes

Install

cargo add send_ctrlc
# Or for async/tokio:
cargo add send_ctrlc -F tokio

Features

  • Cross platform (including Windows)
  • Uniform cross platform API
  • Both sync and async
  • Only 2 unsafe calls
  • Minimal dependencies:
    • Synchronous: libc on unix, and windows-sys on windows
    • Asynchronous: tokio (with only process feature)

Examples

The first example below is for synchronous use cases and the second for tokio/async use cases. However, both interrupt and terminate are available for both sync/async code.

use send_ctrlc::{Interruptible as _, InterruptibleCommand as _};

// Interrupt example

#[cfg(not(feature = "tokio"))]
fn main() {
        // Create a continuous ping standard command
        let mut command = std::process::Command::new("ping");
        #[cfg(windows)]
        command.arg("-t");
        command.arg("127.0.0.1");

        // Spawn the ping, interrupt it, and wait for it to complete
        let mut child = command.spawn_interruptible().unwrap();
        child.interrupt().unwrap();
        child.wait().unwrap();
}

// Terminate example (async/tokio)

#[cfg(feature = "tokio")]
#[tokio::main]
async fn main() {
        // Create a continuous ping standard command
        let mut command = tokio::process::Command::new("ping");
        #[cfg(windows)]
        command.arg("-t");
        command.arg("127.0.0.1");

        // Spawn the ping, interrupt it, and wait for it to complete
        let mut child = command.spawn_interruptible().unwrap();
        child.terminate().unwrap();
        child.wait().await.unwrap();
}

Contributions

Contributions are welcome as long they align with the vision for this crate.

Commit count: 0

cargo fmt