- 论坛徽章:
- 0
|
本帖最后由 lemon627 于 2010-12-03 15:30 编辑
我是在RedHat linux 5 as下,
信号SIGUSR2能触发第一次信号,之后就不行了,不知道为什么?哪位高手看看?- #include <stdio.h>
- #include <signal.h>
- #include <setjmp.h>
- jmp_buf have_recv_env;
- char have_recv_flag = 0;
- have_recv()
- {
- alarm(0);
- have_recv_flag = 1;
- fprintf(stderr, "Recv a signal SIGUSR2, have_recv.(pid:%d)\n", getpid());
- longjmp(have_recv_env, 1);
- }
- void main()
- {
- int i=0;
- int j=1;
- signal(SIGUSR2, SIG_IGN);
- fprintf(stderr, "start test(pid:%d)\n", getpid());
- while(1)
- {
- fprintf(stderr, "==========================\n");
- fprintf(stderr, "begin while times(%d)\n", j);
- have_recv_flag = 0;
- i=signal(SIGUSR2, (void (*)())have_recv);
- fprintf(stderr, "signal have_recv :i=[%d]\n", i);
- setjmp(have_recv_env);
- fprintf(stderr, "setjmp(have_recv_env)\n");
-
- if (have_recv_flag == 1) {
- signal(SIGUSR2, SIG_IGN);
- fprintf(stderr, "recv SIGUSR2\n");
- }
- else
- pause();
- j++;
- fprintf(stderr, "end while\n");;
- }
-
- ;
- }
复制代码 |
|