Unix 使用sigaction时,如何替换默认的SIGINT处理程序?
我一直在玩Unix 使用sigaction时,如何替换默认的SIGINT处理程序?,unix,signals,rust,Unix,Signals,Rust,我一直在玩nix-rust机箱中的sigaction,试图在我的程序中处理SIGINT信号,而不是什么都不做。虽然我能够通过以下方式处理信号: let sig_action = signal::SigAction::new( handle_signal, signal::SockFlag::empty(), signal::SigSet::empty() ); unsafe { signal::sigaction(signal::SIGINT, &sig_acti
nix-rust
机箱中的sigaction
,试图在我的程序中处理SIGINT信号,而不是什么都不做。虽然我能够通过以下方式处理信号:
let sig_action = signal::SigAction::new(
handle_signal,
signal::SockFlag::empty(),
signal::SigSet::empty()
);
unsafe { signal::sigaction(signal::SIGINT, &sig_action); }
似乎无论我在
handle\u signal
函数中做什么,当它结束时,SIGINT仍然被处理并且程序退出。我的处理程序不会替换默认功能,而是在它之前发生。为了防止中断仍然导致程序退出,该函数必须做些什么?您是否正在使用cargo run
运行程序?如果是这样的话,听起来你的程序正在处理SIGINT信号,而不是货物被杀死。由于货物没有任何特殊处理,它被信号杀死,从而结束你的程序 这是在OSX上实现的;我无法用control-C终止程序,它会打印出“handling”。请注意,signal::sigaction
返回一个您忽略的结果
,可能您想添加一个unwrap
调用来检查错误。