现在的位置: 首页 > 综合 > 正文

Linux c 信号丢失问题

2017年12月14日 ⁄ 综合 ⁄ 共 998字 ⁄ 字号 评论关闭

信号的可靠与不可靠以及信号的含义

                     信号有丢失.(信号压缩)

                     由于历史的缘故:信号有压缩的需求.

                     可靠信号(实时信号)与不可靠信号(非实时信号).

                    

                     早期信号 1-31 31个信号, 不可靠(与系统有关).(会有信号丢失

                     后期信号34-64 31个信号,可靠信号(用户信号)       (不会出现信号丢失

 

例子1:信号丢失

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

 

void deal()

{

   printf(“信号发生!\n”);

}

 

void main()

{

     signal(SIGINT,deal);

    while(1);

}

 

 

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

 

void main()

{

     inti;

    for(i=0;i<5;i++)

    {

       kill(pid,SIGINT);  //注pid为上面程序的进程id,此处用pid代替

    }

}

 

该例子会出现一个问题:程序发生5次信号,但程序就只接受到了2次信号,因为发送的是非实时信号(与系统有关),系统压缩了同样的信号。

 

 

 

 

例子2:信号不丢失

 

 

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

 

void deal()

{

   printf(“信号发生!\n”);

}

 

void main()

{

    signal(35,deal);

    while(1);

}

 

 

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

 

void main()

{

     inti;

    for(i=0;i<5;i++)

    {

       kill(pid,35);  //注pid为上面程序的进程id,此处用pid代替

    }

}

 

此程序就不会出现信号丢失,会打印5次信号发生,因为发送的信号为实时信号时用户信号,系统不会压缩出现次数过多的同一个信号。

 

 

 

抱歉!评论已关闭.