如何中止Rust进程?

时间:2016-12-02 22:12:28

标签: rust ffi abort

我正在包装一个可以失败的malloc的C库。 Rust的其余部分在OOM上中止,所以我也想这样做。有std::intrinsics::abort()core::intrinsics::abort()(差异是什么?)但它们都不稳定。

如何使用稳定的Rust中止()?

3 个答案:

答案 0 :(得分:3)

您可以致电panic!()

但是,如果您可以拦截失败的分配,并以稳定的程序状态返回Rust,我认为最好报告错误(使用Result等)。

答案 1 :(得分:2)

因为Rust代码通常与定义了abort的C运行时库链接,所以您可以使用extern块导入该函数:

extern {
    fn abort();
}

fn main() {
    unsafe { abort(); }
}

请注意,这实际上与abort内在函数不同:abort()函数引发SIGABRT,而内在函数生成无效指令(ud2),导致{SIGILL 1}}。

希望std::process::abort将来会稳定下来。

答案 2 :(得分:2)

从Rust 1.17.0开始,您可以致电std::process::abort()