首先说明我的系统,CentOS 6.6,内核为2.6.32-504.12.2.el6.i686。 当用signal对某个信号设定信号处理函数的时候,有些信号的处理函数会被重置,有些则不会,这种情况的具体说明我还没有找到,这里我就先列一下我找到的几个信号。 信号处理程序会 ...
首先说明我的系统,CentOS 6.6,内核为2.6.32-504.12.2.el6.i686。
当用signal对某个信号设定信号处理函数的时候,有些信号的处理函数会被重置,有些则不会,这种情况的具体说明我还没有找到,这里我就先列一下我找到的几个信号。
信号处理程序会被重置的信号:
1. SIGALRM
比如下面这段代码,这段代码的作用就是给自己发送SIGALRM信号,直到发送了NUM次。
1 #include <errno.h> 2 #include <pwd.h> 3 #include <signal.h> 4 #include <string.h> 5 #include <stdlib.h> 6 #include <stdarg.h> 7 #include <stdio.h> 8 #include <sys/types.h> 9 #include <unistd.h>10 11 #define BUFSIZE 51212 #define NUM 513 14 /*15 * 这三个函数是我自定义的,功能就是利用strerror打印errno的信息,并且退出16 */17 void err_exit(char *fmt,...);18 int err_dump(char *fmt,...);19 int err_ret(char *fmt,...);20 21 int alrm_count = 0; //对发送的alrm信号进行计数22 /*23 * 本函数用来处理SIGALRM信号24 */25 void sig_alrm(int signo)26 {27 alrm_count++;28 printf("In signal SIGALRM handler\n");29 if(SIG_ERR == signal(SIGALRM,sig_alrm))30 err_exit("[signal]: ");31 if(alrm_count < NUM) {32 alarm(1);33 pause();34 }35 }36 37 int main(int argc,char *argv[])38 {39 if(SIG_ERR == signal(SIGALRM,sig_alrm))40 err_exit("[signal]: ");41 42 /*alarm函数的功能就是在1s之后向本进程发送一个SIGALRM信号*/43 alarm(1);44 pause();45 46 return 0;47 }
原标题:信号处理程序(signal handler)会被重置的函数
关键词:函数
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。