- 论坛徽章:
- 0
|
回复 #5 richardzhang 的帖子
就是说,你设置捕捉信号 x,对应的处理函数为 f,则信号 x 发生后,系统会把你刚才的设置取消,恢复成系统默认的处理方式---通常就是退出。
使用 glibc2 的 linux 系统的行为跟上面描述的不一样,不会恢复默认设置。也就是说,你所设置的 x 与 f 的对应会保持下去。传统的 BSD 也是这样处理的。
看这一段代码:
- #include <signal.h>
- #include <unistd.h>
- #include <stdio.h>
- void
- sigroutine (int dunno)
- {
- printf ("Get a signal -- SIGINT\n ");
- return;
- }
- int
- main ()
- {
- signal (SIGINT, sigroutine);
- for (;;);
- }
复制代码
运行时,如果用 Ctrl-C 多次发送 SIGINT, 程序不会终止。
如果要观察你所描述的重设置现象,可以在编译时加入 _XOPEN_SOURCE 参数
这样在程序运行时,按 Ctrl-C 两次,程序就会退出。
[ 本帖最后由 win_hate 于 2007-11-16 22:03 编辑 ] |
|