使用信号集,验证可靠信号挨个排队响应和不可靠信号会丢失的特点

简介: 使用信号集,验证可靠信号挨个排队响应和不可靠信号会丢失的特点

可靠信号:(34-64)如果多个进程同时给一个进程发信号,会排队,依次从大到小依次响应。(没有默认触发机制)

不可靠信号(1-31)会丢失

验证代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>

void Signal_Task1(int num)  //输出不可靠信号
{
    printf("%d\n", num);
}

void Signal_Task2(int num)  //输出可靠信号
{

    printf("%d\n", num);
    if (num == 34)
    {
        printf("------------------可靠信号------------\n");
    }
}
int main()
{
    sigset_t sig_set;
    //清空信号集
    int sigemptyset_ret = sigemptyset(&sig_set);
    if (sigemptyset_ret == -1)
    {
        perror("sigemptyset");
        exit(-1);
    }
    else
    {
        printf("清空信号集成功!\n");
    }
    //将不可靠信号添加到信号集中
    for (int i = 1; i <= 31; i++)
    {
        if (i == 9 || i == 19)
            continue;
        signal(i, Signal_Task1);
        sigaddset(&sig_set, i);
        //设置信号集堵塞
        sigprocmask(SIG_BLOCK, &sig_set, NULL);
        raise(i); //自己调用自己
    }
    //将可靠信号添加到信号集中
    for (int i = 34; i <= 64; i++)
    {

        signal(i, Signal_Task2);
        sigaddset(&sig_set, i);
        //设置信号集堵塞
        sigprocmask(SIG_BLOCK, &sig_set, NULL);
        raise(i);
    }
    //信号集解除阻塞
    int unsigprocmask_ret = sigprocmask(SIG_UNBLOCK, &sig_set, NULL);
    if (unsigprocmask_ret == -1)
    {
        perror("sigprocmask");
        exit(-1);
    }
    else
    {
        printf("解除信号堵塞成功\n");
    }
    while (1)
    {
        sleep(1);
    }
    return 0;
}
相关文章
|
4月前
|
网络协议 网络性能优化
传输控制
【10月更文挑战第20天】传输控制
50 3
|
6月前
|
8月前
|
缓存 网络架构
计算机网络——数据链路层-可靠传输的实现机制:停止-等待协议SW(确认与否认、超时重传等,信道利用率及相关练习题)
计算机网络——数据链路层-可靠传输的实现机制:停止-等待协议SW(确认与否认、超时重传等,信道利用率及相关练习题)
168 0
|
缓存 网络协议 Linux
网络的救命稻草:重传机制如何确保数据顺利传输?
在网络传输中,数据的可靠性和稳定性一直是一个重要的挑战。幸运的是,重传机制应运而生,为我们解决了这个问题。本文将深入探讨重传机制在网络中的应用和工作原理。我们将介绍TCP中最常见的超时重传和快速重传,以及SACK和D-SACK这两种高级重传机制。了解这些机制如何工作可以帮助我们更好地理解数据传输的可靠性和稳定性的保障。
467 1
网络的救命稻草:重传机制如何确保数据顺利传输?
|
9月前
无线通信中的重传机制是如何工作的?
无线通信中的重传机制是如何工作的?
372 0
MOTOROLA 30-W2960B01A 增加了对消息信号中断
MOTOROLA 30-W2960B01A 增加了对消息信号中断
104 0
MOTOROLA 30-W2960B01A 增加了对消息信号中断
HIMA F8650E 使用适当的控制信号迫使系统
HIMA F8650E 使用适当的控制信号迫使系统
 HIMA F8650E 使用适当的控制信号迫使系统
|
运维 安全 UED
这些网站发出的待升级信号你错过了吗?
这些网站发出的待升级信号你错过了吗?
224 1
这些网站发出的待升级信号你错过了吗?
|
存储 Java
Choreographer响应Vsync信号流程
Choreographer响应Vsync信号流程
169 0
Choreographer响应Vsync信号流程
【计算机网络】数据链路层 : 停止-等待协议 ( 无差错情况 | 有差错情况 | 帧丢失 | 帧出错 | ACK 确认帧丢失 | ACK 确认帧延迟 | 信道利用率公式 | 信道利用率计算 )★(一)
【计算机网络】数据链路层 : 停止-等待协议 ( 无差错情况 | 有差错情况 | 帧丢失 | 帧出错 | ACK 确认帧丢失 | ACK 确认帧延迟 | 信道利用率公式 | 信道利用率计算 )★(一)
350 0