- 论坛徽章:
- 2
|
最近学习,用到了alarm的信号处理。照着书抄写了代码,但是发现,在执行了信号处理函数之后,就挂死在哪里了,是我代码问题还是系统问题?
下面是我写的代码:- #include <signal.h>
- #include <unistd.h>
- #include <stdio.h>
- void sig_alarm(int )
- {
- printf("==========alarm clock!==============\n");
- }
- void test_alarm()
- {
- alarm(3);
- char buf[1024] = {0};
- int len = read(STDIN_FILENO,buf,1024);
- alarm(0);
- printf("test alarm succed!\n");
- }
- int main()
- {
- signal(SIGALRM,sig_alarm);
- test_alarm();
- return 0;
- }
复制代码 gstac查看进程信息,发现挂死在__kernel_vsyscall,情况如下:- [knull@knull sock_raw]$ gstack 5212
- #0 0x009b0424 in __kernel_vsyscall ()
- #1 0x00c0c8c3 in __read_nocancel () from /lib/libc.so.6
- #2 0x08048563 in test_alarm() ()
- #3 0x080485aa in main ()
复制代码 我的系统版本是CentOS release 6.5 (Final)
编译器版本是gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) |
|