测测你的Linux如何处理信号量?

在你的Linux系统中,一个进程是如何响应多个信号的?

做个小实验~上代码。

    #include<stdio.h>    #include<signal.h>       #define INPUTLEN  (100)       int main(int ac, char* av[])   {       void inthandler(int);       void quithandler(int);       char input[INPUTLEN];       int  nchars;              signal(SIGINT, inthandler);       signal(SIGQUIT, quithandler);          do{           printf("\nType a message\n");            nchars = read(0, input, (INPUTLEN-1));           if(nchars == -1)               perror("read returned an error");           else           {               input[nchars] = '\0';               printf("You typed: %s", input);           }       }while(strncmp(input, "quit", 4) != 0);   }      void inthandler(int s)   {       printf("Received signal %d.. waiting\n", s);       sleep(2);       printf("Leaving inthandler\n");   }      void quithandler(int s)   {       printf("Received signal %d .. waiting \n", s);       sleep(3);       printf("Leaving quithandler\n");   }  

流程很简单,为SIGINT,SIGQUIT设定信号处理函数,主程序一直循环,接收来自stdin的输入,直到接收到"quit"结束。

SIGINT 信号,可以由ctrl+c 来产生,SIGQUIT信号,可以由 ctrl+\ 来产生。编译之后,来看现象。

1、SIGINT+SIGINT+SIGINT+SIGINT(多个相同信号)

笔者的系统是Ubuntu9.10,连续发送4个SIGINT后,系统先处理一个,再阻塞一个,忽略后两个。处理完第一个后,阻塞的才被处理。SIGQUIT同样效果。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzdyj.html