Function std::process::abort

1.17.0 · source ·
pub fn abort() -> !
Expand description

以异常方式终止进程。

该函数将永远不会返回,并会以特定于平台的 “abnormal” 方式立即终止当前进程。

请注意,由于此函数从不返回,并且终止了该进程,因此将不运行当前栈或任何其他线程的栈上的析构函数。

Rust IO 缓冲区 (例如,来自 BufWriter) 不会被刷新。 同样,C 标准输入输出缓冲器 (在大多数平台上) 不会被刷新。

这与 panic! 的默认行为相反,后者默认情况下会展开当前线程的栈并调用所有析构函数。 设置 panic="abort" 时,无论是 rustc 的参数还是 crate 的 Cargo.toml,panic!abort 都是相似的。 但是,panic! 仍然会调用 panic 钩子,而 abort 不会。

如果需要彻底关闭,建议仅在没有更多析构函数可以运行的已知点上调用此函数。

该进程的中止将类似于 C abort() 函数的中止。 在 Unix 上,进程将以信号 SIGABRT 中止,这通常意味着 shell 打印 “Aborted”。

Examples

use std::process;

fn main() {
    println!("aborting");

    process::abort();

    // 执行永远不会到这里
}
Run

abort 函数会中止该进程,因此析构函数将不会在以下示例上运行:

use std::process;

struct HasDrop;

impl Drop for HasDrop {
    fn drop(&mut self) {
        println!("This will never be printed!");
    }
}

fn main() {
    let _x = HasDrop;
    process::abort();
    // 为 HasDrop 实现的析构函数永远不会运行
}
Run