读书人

进程中捕捉 SIGSEGV 之后状态是否稳

发布时间: 2012-02-17 17:50:42 作者: rapoo

进程中捕捉 SIGSEGV 之后,状态是否稳定?
朋友提的问题,大致描述一下:

程序是一个编解码软件,其中调用到某些外部不可控的模块进行编码解码工作。其中会出现指针错误导致的 SIGSEGV。问如果在调用环节通过 sigaction 捕捉这个信号然后跳出继续执行,会不会对程序的稳定运行造成?

我的猜想是出现 SIGSEGV 后,当前线程执行状况从一定程度而言是不可确定的,但是没有明显的理论和实际证据可以证明,请各位前辈指教。

[解决办法]
既然是未定义的,那标准对实现没有限制
[解决办法]
12
[解决办法]
你能捕捉到操作系统层的访问限制的signal吗?

如果能捕捉的可以当作异常跳出执行分之

就怕后续分支影响比较大, 你处理不完全还是会导致问题
[解决办法]
SIGSEGV
发生时,已经破坏了当前系统的运行状态,并且没有方法确定这种错误是什么时候发生的.也就没办法来
修正这个状态.

sigaction 捕捉这个信号然后跳出继续执行-----------在不正常的基础上继续工作,程序的结果应该是不可预测的.


再说,SIGSEGV 发生时,甚至可能把你的栈环境给破坏掉.这种情况更没法保证程序的运行结果.
对于这种情况,sigaltstack函数可能会其些作用.

读书人网 >C语言

热点推荐