Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用sigaction时,如何替换默认的SIGINT处理程序?_Unix_Signals_Rust - Fatal编程技术网

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
调用来检查错误。