首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >进程何时获得SIGABRT (信号6)?

进程何时获得SIGABRT (信号6)?
EN

Stack Overflow用户
提问于 2010-08-05 17:00:18
回答 9查看 451.6K关注 0票数 243

进程在C++中获得SIGABRT的场景是什么?该信号是否总是来自进程内部,或者该信号是否可以从一个进程发送到另一个进程?

有没有办法确定是哪个进程发送了这个信号?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-08-05 17:06:28

abort()向调用进程发送SIGABRT信号,这是abort()的基本工作方式。

abort()通常由库函数调用,用于检测内部错误或某些严重破坏的约束。例如,如果其内部结构被堆溢出损坏,malloc()将调用abort()

票数 233
EN

Stack Overflow用户

发布于 2010-08-05 17:08:45

SIGABRT通常由libc和其他库使用,用于在出现严重错误时中止程序。例如,在检测到双释放或其他堆损坏的情况下,glibc会发送SIGABRT

而且,大多数assert实现都会在断言失败的情况下使用SIGABRT

此外,SIGABRT可以像任何其他信号一样从任何其他进程发送。当然,发送进程需要以相同的用户或根用户身份运行。

票数 59
EN

Stack Overflow用户

发布于 2010-08-05 17:06:25

您可以使用kill(2)接口向任何进程发送任何信号:

kill -SIGABRT 30823

30823是我启动的一个dash进程,所以我可以很容易地找到我想要杀死的进程。

代码语言:javascript
复制
$ /bin/dash
$ Aborted

Aborted输出显然是dash报告SIGABRT的方式。

它可以使用kill(2)直接发送到任何进程,或者进程可以通过assert(3)abort(3)raise(3)将信号发送给自己。

票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3413166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档