如何中止 Rust 进程?

     2023-02-22     213

关键词:

【中文标题】如何中止 Rust 进程?【英文标题】:How do I abort a Rust process? 【发布时间】:2016-12-02 22:12:27 【问题描述】:

我正在包装一个 C 库,它执行一些可能会失败的 mallocs。 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以后能稳定下来。

【讨论】:

当用户中止请求时,如何让 PHP-FPM 进程终止? (Nginx)

】当用户中止请求时,如何让PHP-FPM进程终止?(Nginx)【英文标题】:HowdoIgetthePHP-FPMprocesstoterminatewhenauserabortsrequest?(Nginx)【发布时间】:2012-05-0805:23:13【问题描述】:我知道Nginx与PHP-FPM进程无关,但我更希望PHP-FPM进程在用户中止... 查看详情

中止时如何使用 SIGINT 而不是 SIGTERM 终止 Jenkins 作业中的 psql 进程?

】中止时如何使用SIGINT而不是SIGTERM终止Jenkins作业中的psql进程?【英文标题】:HowtoterminatepsqlprocessinsideJenkinsjobwithSIGINTinsteadofSIGTERMwhenaborted?【发布时间】:2017-07-1909:40:33【问题描述】:我有一个Jenkins作业,它使用shell(bash)脚本... 查看详情

在 Rust 中写入子进程的标准输入?

...该方法似乎只接受现有文件或管道。给定一个字节,你将如何将它写入Command的标准输入?【问题讨论】:【参考方案1】:您可以创建一个标准输入管道并在其上写入字节。当 查看详情

如何中止对 sigwaitinfo 的调用?

】如何中止对sigwaitinfo的调用?【英文标题】:HowcanIabortthecalltosigwaitinfo?【发布时间】:2018-08-0416:55:26【问题描述】:背景我的目标是在专用线程上处理某些信号,而不是让它们在发出信号时恰好在我的进程中运行的任何线程上... 查看详情

Django-使用内联函数时进程中止

】Django-使用内联函数时进程中止【英文标题】:Django-WhenusingInlineFunctionprocessaborted【发布时间】:2016-07-1619:23:23【问题描述】:我在djangoAdmin中遇到了一个奇怪的障碍。当我使用inline=[inlineFunction]时然后它触发进程状态中止错误... 查看详情

无法中止进程无法访问操作拒绝访问

无法中止进程无法访问操作拒绝访问解决方案:使用360解除占用任务管理器显示进程路径 找到该进程的路径 右键使用360解除占用 注:此方法有可能会无效,如果谁有更好的方法,请说明,谢谢。其他方法(在控制台... 查看详情

Rust 编译错误:进程没有成功退出

】Rust编译错误:进程没有成功退出【英文标题】:Rustcompilingerror:processdidn\'texitsuccessfully【发布时间】:2020-02-1612:48:43【问题描述】:最近,我无法在Rust中执行cargorun。我得到的错误是error:processdidn\'texitsuccessfully:target\\debug\\backen... 查看详情

如何中止在 python3 中等待 sys.stdin?

】如何中止在python3中等待sys.stdin?【英文标题】:Howtoabortwaitingforsys.stdininpython3?【发布时间】:2016-11-2006:11:24【问题描述】:我正在运行一个包含两个线程的脚本,一个从子进程读取的线程和一个主线程。在主线程中,我正在... 查看详情

如何中止 LocalServerSocket.accept

】如何中止LocalServerSocket.accept【英文标题】:HowtoabortLocalServerSocket.accept【发布时间】:2011-12-1519:48:28【问题描述】:如何在后台线程中中止/中断LocalServerSocket等待方法LocalServerSocker.accept()中的连接?我尝试从另一个线程调用close(... 查看详情

如何中止获取请求?

】如何中止获取请求?【英文标题】:Howtoabortafetchrequest?【发布时间】:2017-06-1904:55:59【问题描述】:我一直在使用新的fetchAPI而不是旧的XMLHttpRequest这很棒,但我缺少一个关键功能,xhr.abort()。我找不到任何有关获取该功能的信... 查看详情

在 Rust 命令过程中写入 stdio 并从 stdout 读取

...言之,这是我的问题:我正在尝试将节点shell作为Rust中的进程生成。我想传递给进程的标准输入javascript代码并从进程的标准输出读取nodejs输出 查看详情

为啥 Rust RwLock 在 fork 中表现异常?

...和分叉时,我看到了一些我无法解释的行为。基本上,子进程报告RwLock仍被获取,而父进程没有,即使它们都运行相同的代码路径。我的理解是子进程应该收到父进程内存 查看详情

如何中止异步等待管道连接? [复制]

】如何中止异步等待管道连接?[复制]【英文标题】:Howtoabortanasyncwaitforapipeconnection?[duplicate]【发布时间】:2017-07-2516:04:58【问题描述】:在下面的代码中namespacenspublicpartialclassForm1:FormpublicForm1()InitializeComponent();stringProcessCommand(st... 查看详情

如何中止winsock阻塞调用?

】如何中止winsock阻塞调用?【英文标题】:Howtoabortwinsockblockingcall?【发布时间】:2010-01-2510:14:31【问题描述】:我在C++中使用Winsock2,想知道如何让我的服务器停止从客户端连接读取。阅读线程在recv()中被阻塞,我不知道如何中... 查看详情

无法在 Rust 中两次读取子标准错误

...:31:15【问题描述】:由于某种原因,我第二次无法读取子进程stderr。这就是我所做的。我正在为黄瓜测试生成一个子进程。在第一步中,我生成进程,获取它的stderr,保存它,然后从中读取。代码如下:pubfnwait_process_output(reader:&... 查看详情

如何中止使用 ThreadPool.QueueUserWorkItem 创建的线程

】如何中止使用ThreadPool.QueueUserWorkItem创建的线程【英文标题】:HowtoabortthreadscreatedwithThreadPool.QueueUserWorkItem【发布时间】:2010-09-0619:26:09【问题描述】:有没有办法中止使用QueueUserWorkItem创建的线程?或者也许我不需要?如果主... 查看详情

您如何中止/结束 Chef 运行?

】您如何中止/结束Chef运行?【英文标题】:Howdoyouabort/endaChefrun?【发布时间】:2012-12-2618:10:33【问题描述】:在某些情况下,我需要使用非零状态代码中止/结束Chef运行,然后它将通过我们的部署链传播回并最终传播到Jenkins,... 查看详情

如何恢复中止的变基

】如何恢复中止的变基【英文标题】:HowtoRecoveranAbortedRebase【发布时间】:2019-06-2420:00:30【问题描述】:我正在处理一个变基列表并做了gitadd,进行了更改,然后是rebase--continue。然而,在此期间我不小心输入了rebase--abort.我想继... 查看详情