答案 0 :(得分:2)
Rust不支持信号作为标准库的一部分。我相信这是因为它们是高度特定于平台的,并且非常适合大多数多线程程序。
有一些箱子可以处理信号; chan-signal是我之前使用的那个。以下是该库中的示例代码,已更改为报告SIGFPE
:
#[macro_use]
extern crate chan;
extern crate chan_signal;
use chan_signal::Signal;
use std::thread;
fn main() {
let signal = chan_signal::notify(&[Signal::FPE]);
let (sdone, rdone) = chan::sync(0);
thread::spawn(move || run(sdone));
chan_select! {
signal.recv() -> signal => {
println!("received signal: {:?}", signal)
},
rdone.recv() => {
println!("Program completed normally.");
}
}
}
fn run(_sdone: chan::Sender<()>) {
thread::sleep_ms(100_000);
}
在macOS上,在一个窗口中运行它并在另一个窗口中运行kill -s FPE $THE_RUNNING_PID
会生成输出
received signal: Some(FPE)