作者timTan (用口頭禪區分年記)
看板LinuxDev
標題Re: [問題] 利用SIGSEGV來重啟原本程式
時間Fri Aug 5 23:13:01 2011
請看
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
推 shaopin:就是說 同一個signal只會收到一次的意思囉? 08/06 00:38
→ timTan:要講block才精確。 08/06 01:11
推 lmr3796:其實我比較好奇的是segv不是無法被handle的signal嗎? 08/07 15:38
推 troylee:不是..只有 SIGKILL/SIGSTOP 不能 08/07 15:54
→ troylee:SIGSEGV 是可以的喔..而且很好用喔 08/07 15:55