Re: [問題] 如何忽略系統發出的signal???

看板LinuxDev作者 (把我id還我阿......)時間17年前 (2007/07/24 01:40), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

07/24 14:02, , 1F
感謝你~ :)
07/24 14:02, 1F

07/24 23:13, , 2F
這個segmentation fault絕對不能忽略...
07/24 23:13, 2F

11/11 14:40, , 3F
segfault 在規格上是不能被另訂 handler 的
11/11 14:40, 3F
文章代碼(AID): #16fEWdZd (LinuxDev)
文章代碼(AID): #16fEWdZd (LinuxDev)