Ржавчина не поддерживает сигналы как часть стандартной библиотеки. Я считаю, что это потому, что они очень специфичны для платформы и довольно ужасно разработаны для большинства многопоточных программ.
Есть несколько ящиков, доступных для обработки сигналов; 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)
Каких действий вы хотите взять переполнение и т. д., и можете ли вы указать на пример этого в C? –