如何用退出代码干净地结束程序?

时间:2015-05-16 22:03:56

标签: rust

有没有办法在Rust 1.0中返回退出代码?

我已尝试env::set_exit_status(exit_code);,但这会产生编译错误。

还有一个问题:Exit Rust program early这个问题很相似,但询问过程必须提前退出的情况。

编辑:我正在寻找一个解决方案,它也可以让进程整理堆栈,调用析构函数等。

3 个答案:

答案 0 :(得分:36)

建立@FrancisGagné 's answer的评论,如果您正在搜索相应的C return exit_code,您可以通过这种方式人为地构建它:

fn main() {
    let exit_code = real_main();
    std::process::exit(exit_code);
}

fn real_main() -> i32 {
    // the real program here
}

这样,程序的所有对象都将在real_main()函数的范围内,并且您可以在return exit_code;中安全地使用main,同时仍然可以正确运行所有析构函数。

使用std::env::set_exit_status(..)更合适,但此函数还没有稳定的Rust。

答案 1 :(得分:10)

std::process::exit使用指定的退出代码退出程序。

答案 2 :(得分:3)

从Rust 1.26开始,main函数不再局限于()main还可以返回任何类型Result<(), E>的{​​{1}}。 E: Debug值映射到Ok(在所有平台上恰好为0),而EXIT_SUCCESS值映射到Err(在所有平台上恰好为1)。错误值也会自动打印到标准错误流中。

将来,Rust将支持EXIT_FAILURE的更多返回类型。 Termination特征(从Rust 1.31.1开始是不稳定的)定义了所有这些类型。 trait的工作是将值转换为main退出代码。当i32稳定下来后,应用程序自然可以自行实现该特征以提供自己的结果类型。