Skip to content

nu11ptr/send_ctrlc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Cross platform crate for sending interrupts/ctrl-c to child processes

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages