Re: [問題] 利用SIGSEGV來重啟原本程式

看板LinuxDev作者 (用口頭禪區分年記)時間14年前 (2011/08/05 23:13), 編輯推噓3(302)
留言5則, 4人參與, 最新討論串2/2 (看更多)
請看 http://goo.gl/FWGMg 重點就是 signal handler 沒有結束的話。同一signal 是會被block住的。 ※ 引述《awaysu》之銘言: : void sighandler (int signal_number) : { : signal(SIGTERM, SIG_IGN); : if (fork() == 0) : { : printf("run app again;\n"); : system("./testapp"); : exit(EXIT_SUCCESS); : } : exit(EXIT_SUCCESS); : } : int main(int argc, char *argv[]) : { : printf("run app start!! %d\n", getpid()); : struct sigaction sa; : memset (&sa, 0, sizeof (sa)); : sa.sa_handler = &sighandler; : sigaction (SIGSEGV, &sa, NULL); : sleep(3); : *(volatile unsigned char *)0; : return 0; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.8.191

08/06 00:38, , 1F
就是說 同一個signal只會收到一次的意思囉?
08/06 00:38, 1F

08/06 01:11, , 2F
要講block才精確。
08/06 01:11, 2F

08/07 15:38, , 3F
其實我比較好奇的是segv不是無法被handle的signal嗎?
08/07 15:38, 3F

08/07 15:54, , 4F
不是..只有 SIGKILL/SIGSTOP 不能
08/07 15:54, 4F

08/07 15:55, , 5F
SIGSEGV 是可以的喔..而且很好用喔
08/07 15:55, 5F
文章代碼(AID): #1EF0X_Tq (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #1EF0X_Tq (LinuxDev)