Function mio_signals::send_signal[][src]

pub fn send_signal(pid: u32, signal: Signal) -> Result<()>
Expand description

Send signal to the process with pid.

Examples

Send ourselves a signal.

use std::{io, process};

use mio::{Poll, Events, Interest, Token};
use mio_signals::{Signals, Signal, SignalSet, send_signal};

const SIGNAL: Token = Token(10);

fn main() -> io::Result<()> {
    let mut poll = Poll::new()?;
    let mut events = Events::with_capacity(8);

    // Create a `Signals` instance that will catch signals for us.
    let mut signals = Signals::new(SignalSet::all())?;
    // And register it with our `Poll` instance.
    poll.registry().register(&mut signals, SIGNAL, Interest::READABLE)?;

    // Send ourselves a signal.
    send_signal(process::id(), Signal::Interrupt)?;

    loop {
        poll.poll(&mut events, None)?;

        for event in events.iter() {
            match event.token() {
                // Because we're using edge triggers (default in Mio) we need
                // to keep calling `receive` until it returns `Ok(None)`.
                SIGNAL => loop {
                    match signals.receive()? {
                        Some(Signal::Interrupt) => {
                            println!("Got interrupt signal");
                            return Ok(());
                        },
                        Some(signal) => {
                            println!("Got unexpected signal: {:?}", signal);
                            return Err(io::Error::new(io::ErrorKind::Other, "unexpected signal"));
                        },
                        None => break,
                    }
                },
                _ => println!("Got unexpected event: {:?}", event),
            }
        }
    }
}