作者roylee17 (把我id还我阿......)
看板LinuxDev
标题Re: [问题] 如何忽略系统发出的signal???
时间Tue Jul 24 01:40:54 2007
※ 引述《Falldog (嘿嘿~)》之铭言:
: 因为会发生segmentation fault时 系统会send出signal SIGSEGV
: 现在想先暂时将此signal忽略掉 继续执行程式
: 不知有何妙方可以???
: 我试过
: void getSegmentFault(){ ... }
: int main(){
: signal( SIGSEGV, (sig_t)getSegmentFault );
: ...
: }
: 却会不停地不停地收到SIGSEGV....囧rz...
fault 发生後,必须处理过造成 fault 的原因,再返回程式执行
返回程式後,会重新执行 faulting instruction
以 page fault 为例,kernel 会为程式配置好该 page 再返回程式执行
重新执行 faulting instruction 时,就不会再引起 page fault
segmentation fault,预设的行为就是终止程式
如果你想忽略它的话,可在 signal handler 处理
segv_handler(){
longjmp();
}
void foo(){
if( !setjmp()){
// do_something
}
else{
// exception handling
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.73.27.81
1F:推 Falldog:感谢你~ :) 07/24 14:02
2F:推 ji3g45j:这个segmentation fault绝对不能忽略... 07/24 23:13
3F:推 COLDTURNIP:segfault 在规格上是不能被另订 handler 的 11/11 14:40