Re: [問題] 如何忽略系統發出的signal???
※ 引述《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
07/24 23:13, 2F
推
11/11 14:40, , 3F
11/11 14:40, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章