进程在C++中获得SIGABRT的场景是什么?该信号是否总是来自进程内部,或者该信号是否可以从一个进程发送到另一个进程?
有没有办法确定是哪个进程发送了这个信号?
发布于 2010-08-05 17:06:28
abort()
向调用进程发送SIGABRT
信号,这是abort()
的基本工作方式。
abort()
通常由库函数调用,用于检测内部错误或某些严重破坏的约束。例如,如果其内部结构被堆溢出损坏,malloc()
将调用abort()
。
发布于 2010-08-05 17:08:45
SIGABRT
通常由libc和其他库使用,用于在出现严重错误时中止程序。例如,在检测到双释放或其他堆损坏的情况下,glibc会发送SIGABRT
。
而且,大多数assert
实现都会在断言失败的情况下使用SIGABRT
。
此外,SIGABRT
可以像任何其他信号一样从任何其他进程发送。当然,发送进程需要以相同的用户或根用户身份运行。
发布于 2010-08-05 17:06:25
您可以使用kill(2)
接口向任何进程发送任何信号:
kill -SIGABRT 30823
30823是我启动的一个dash
进程,所以我可以很容易地找到我想要杀死的进程。
$ /bin/dash
$ Aborted
Aborted
输出显然是dash
报告SIGABRT的方式。
它可以使用kill(2)
直接发送到任何进程,或者进程可以通过assert(3)
、abort(3)
或raise(3)
将信号发送给自己。
https://stackoverflow.com/questions/3413166
复制相似问题