如何中止 Rust 进程?
Posted
技术标签:
【中文标题】如何中止 Rust 进程?【英文标题】:How do I abort a Rust process? 【发布时间】:2016-12-02 22:12:27 【问题描述】:我正在包装一个 C 库,它执行一些可能会失败的 malloc
s。 Rust 的其余部分在 OOM 上中止,所以我也想做同样的事情。有std::intrinsics::abort()
和core::intrinsics::abort()
(有什么区别?),但它们都不稳定。
如何使用稳定的 Rust 中止()?
【问题讨论】:
【参考方案1】:您可以拨打panic!()
。
但是,如果可以拦截失败的分配,并以稳定的程序状态返回Rust,我认为最好报错(使用Result
等)
【讨论】:
我认为标准 Rust 代码在 OOM 上没有panic!()
是有原因的,因此我不想使用它。
@Timmmm 那是因为 Rust 假设展开将分配内存,并且 OOM 意味着没有其他东西可以分配。我个人认为是too pessimistic and causes problems。
panic!
是否中止整个进程,而不是单线程?
panic!()
的作用是可配置的。使用panic=abort
模式,它会立即终止整个进程。在panic=unwind
模式下,它的工作方式类似于 C++ 异常。【参考方案2】:
从 Rust 1.17.0 开始,您可以致电 std::process::abort()
。
【讨论】:
【参考方案3】:由于 Rust 代码通常与定义了 abort
的 C 运行时库链接,因此您可以使用 extern
块导入该函数:
extern
fn abort();
fn main()
unsafe abort();
请注意,这实际上与 abort
内在函数不同:abort()
函数引发 SIGABRT
,而内在函数生成无效指令 (ud2
),从而导致 SIGILL
。
希望std::process::abort
以后能稳定下来。
【讨论】:
以上是关于如何中止 Rust 进程?的主要内容,如果未能解决你的问题,请参考以下文章