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

看板LinuxDev作者時間14年前 (2011/08/04 17:15), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/2 (看更多)
請教各位先進~ 我想用SIGSEGV來重啟原來的程式(有點像迴圈) 但第二次的Segmentation fault無法觸發 請教要怎麼修改或是有其他方式嗎? 感謝~ 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; } -- 你是為了旅行而攝影 還是為了攝影而旅行 http://blog.dcview.com/awaysu -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.231.88 ※ 編輯: awaysu 來自: 114.32.231.88 (08/04 17:25)

08/08 11:14, , 1F
正常應該用 SIGHUP 不是亂用 SIGSEGV
08/08 11:14, 1F

08/08 13:03, , 2F
像這樣的處裡,我會傾向用shell和trap來跑,也保持程式的單
08/08 13:03, 2F

08/08 13:04, , 3F
純性和彈性...
08/08 13:04, 3F
文章代碼(AID): #1EEcC-Yg (LinuxDev)
文章代碼(AID): #1EEcC-Yg (LinuxDev)