作者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
推 Falldog:感謝你~ :) 07/24 14:02
推 ji3g45j:這個segmentation fault絕對不能忽略... 07/24 23:13
推 COLDTURNIP:segfault 在規格上是不能被另訂 handler 的 11/11 14:40