使用sigaction时如何替换默认的SIGINT处理程序?

4

我一直在尝试使用 nix-rust crate 中的 sigaction 函数,以处理程序中的 SIGINT 信号并使其不做任何操作。虽然我已经能够使用以下方式处理信号:

let sig_action = signal::SigAction::new(
    handle_signal,
    signal::SockFlag::empty(),
    signal::SigSet::empty()
);
unsafe { signal::sigaction(signal::SIGINT, &sig_action); }

看起来无论我在handle_signal函数中做什么,当它结束时,SIGINT仍然会被处理并导致程序退出。我的处理程序没有替换默认功能,而是在其之前发生。该函数需要做什么才能防止中断仍然导致程序退出?


1
这在我的 OS X 上可行;我无法使用 control-C 来终止程序,它会打印出“handling”。请注意 signal::sigaction 返回一个 Result,你正在忽略它,也许你想添加一个 unwrap 调用来检查错误。 - Shepmaster
1个回答

1

您是用 cargo run 来运行您的程序吗?如果是这样,那么看起来您的程序正在处理 SIGINT 信号, 而不是 cargo 被终止。由于 cargo 没有特殊的处理方式,因此它被信号杀死,从而结束了您的程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接