作者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
1F:推 shaopin:就是说 同一个signal只会收到一次的意思罗? 08/06 00:38
2F:→ timTan:要讲block才精确。 08/06 01:11
3F:推 lmr3796:其实我比较好奇的是segv不是无法被handle的signal吗? 08/07 15:38
4F:推 troylee:不是..只有 SIGKILL/SIGSTOP 不能 08/07 15:54
5F:→ troylee:SIGSEGV 是可以的喔..而且很好用喔 08/07 15:55