Function notify_on

Source
pub fn notify_on(chan: &Sender<Signal>, signal: Signal)
Expand description

Subscribe to a signal on a channel.

When signal is delivered to this process, it will be sent on the channel given.

Note that a signal is sent using a non-blocking send. Namely, if the channel’s buffer is full (or it has no buffer) and it isn’t ready to rendezvous, then the signal will be dropped.

There is currently no way to unsubscribe. Moreover, the channel given here will be alive for the lifetime of the process. Therefore, the channel will never be closed.

THIS MUST BE CALLED BEFORE ANY OTHER THREADS ARE SPAWNED IN YOUR PROCESS.

Examples found in repository?
examples/test_one.rs (line 9)
7fn main() {
8    let (s, r) = chan::sync(1);
9    chan_signal::notify_on(&s, Signal::HUP);
10    kill_this(Signal::HUP);
11    assert_eq!(r.recv(), Some(Signal::HUP));
12}
More examples
Hide additional examples
examples/test_usr1.rs (line 9)
7fn main() {
8    let (s, r) = chan::sync(1);
9    chan_signal::notify_on(&s, Signal::USR1);
10    kill_this(Signal::USR1);
11    assert_eq!(r.recv(), Some(Signal::USR1));
12}
examples/test_one_not_other.rs (line 11)
8fn main() {
9    block(&[Signal::TERM]);
10    let (s, r) = chan::sync(1);
11    chan_signal::notify_on(&s, Signal::HUP);
12    kill_this(Signal::TERM);
13    kill_this(Signal::HUP);
14    assert_eq!(r.recv(), Some(Signal::HUP));
15}
examples/test_sleep.rs (line 12)
10fn main() {
11    let (s, r) = chan::sync(1);
12    chan_signal::notify_on(&s, Signal::HUP);
13    thread::spawn(move || thread::sleep(Duration::from_secs(10)));
14    thread::sleep(Duration::from_millis(500));
15    kill_this(Signal::HUP);
16    assert_eq!(r.recv(), Some(Signal::HUP));
17}
examples/test_many_to_one.rs (line 10)
7fn main() {
8    let (s1, r1) = chan::sync(1);
9    let (s2, r2) = chan::sync(1);
10    chan_signal::notify_on(&s1, Signal::HUP);
11    chan_signal::notify_on(&s2, Signal::HUP);
12    kill_this(Signal::HUP);
13    assert_eq!(r1.recv(), Some(Signal::HUP));
14    assert_eq!(r2.recv(), Some(Signal::HUP));
15}
examples/test_many.rs (line 10)
7fn main() {
8    let (s1, r1) = chan::sync(1);
9    let (s2, r2) = chan::sync(1);
10    chan_signal::notify_on(&s1, Signal::HUP);
11    chan_signal::notify_on(&s2, Signal::TERM);
12    kill_this(Signal::HUP);
13    assert_eq!(r1.recv(), Some(Signal::HUP));
14    kill_this(Signal::TERM);
15    assert_eq!(r2.recv(), Some(Signal::TERM));
16}