Function std::panic::always_abort

source ·
pub fn always_abort()
🔬This is a nightly-only experimental API. (panic_always_abort #84438)
Expand description

使所有未来的 panic 直接中止,而不运行 panic 钩子或展开。

没有办法撤销这个; 效果持续到进程退出或执行 (或等效)。

fork 后使用

这个函数在 libc::fork 之后调用特别有用。在 fork 之后,在多线程程序中 (在许多平台上) 调用分配器是不安全的。 fork 之后的 unwind 到 unwind 通常也是非常不可取的,因为这会导致 unwind 传播到只希望在父级中运行的代码。

panic::always_abort() 有助于避免这两种情况。 它直接避免了任何进一步的展开,如果存在 panic,则无需分配即可中止中止,前提是 panic 的参数可以在不分配的情况下进行格式化。

Examples

#![feature(panic_always_abort)]
use std::panic;

panic::always_abort();

let _ = panic::catch_unwind(|| {
    panic!("inside the catch");
});

// 由于 panic,我们已经中止了。
unreachable!();
Run