2014-10-09 23 views

Antwort

7

Ich glaube, dass std::io::signal Modul in this Pull-Anforderung entfernt wurde. Es wird behauptet, dass die korrekte Signalverarbeitung für die native Laufzeitumgebung nie richtig implementiert wurde, so dass Sie sie wahrscheinlich sowieso nicht verwenden könnten. This scheint ein Tracking-Problem für dieses Problem zu sein.

In der Zwischenzeit, denke ich, müssen Sie auf die niedrigsten unsicheren Funktionen von libc fallen.

4

Zum Zeitpunkt der Erstellung dieser Antwort gibt es an RFC for built-in signals.

Ich habe einige Erfolge mit the chan-signal crate hatte:

#[macro_use] 
extern crate chan; 
extern crate chan_signal; 

use chan_signal::Signal; 

fn main() { 
    // Signal gets a value when the OS sent a INT or TERM signal. 
    let signal = chan_signal::notify(&[Signal::INT, Signal::TERM]); 
    // When our work is complete, send a sentinel value on `sdone`. 
    let (sdone, rdone) = chan::sync(0); 
    // Run work. 
    ::std::thread::spawn(move || run(sdone)); 

    // Wait for a signal or for work to be done. 
    chan_select! { 
     signal.recv() -> signal => { 
      println!("received signal: {:?}", signal) 
     }, 
     rdone.recv() => { 
      println!("Program completed normally."); 
     } 
    } 
} 

fn run(_sdone: chan::Sender<()>) { 
    println!("Running work for 5 seconds."); 
    println!("Can you send a signal quickly enough?"); 
    // Do some work. 
    ::std::thread::sleep_ms(5000); 

    // _sdone gets dropped which closes the channel and causes `rdone` 
    // to unblock. 
}