一、函数sigqueue

sigqueue函数原型:

函数作用:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用

int sigqueue(pid_t pid, int signo, const union sigval value);

分析:

  • 第一个参数: 指定接收信号的进程id
  • 第二个参数:确定即将发送的信号
  • 第三个参数:是一个联合结构体union sigval,指定了信号传递的参数,即通常所说的4字节值

二、程序清单

1. 测试代码:

发送端程序代码:

#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>void handler(int, siginfo_t *, void*);int main(int argc, char *argv[])
{printf("I'm %d\n", getpid());struct sigaction act;act.sa_sigaction = handler;sigemptyset(&act.sa_mask);act.sa_flags = SA_SIGINFO;if(sigaction(SIGINT, &act, NULL) < 0) {perror("sigaction error");exit(0);}for(; ;)pause();return 0;
}void handler(int sig, siginfo_t *info, void *ctx)
{printf("recv a sig = %d data = %d data = %d\n", sig, info->si_value.sival_int, info->si_int);
}

接收端程序代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>int main(int argc, char *argv[])
{if(argc != 2) {fprintf(stderr, "Usage %s pid\n", argv[0]);exit(0);}pid_t pid = atoi(argv[1]);union sigval v;v.sival_int = 100;sigqueue(pid, SIGINT, v);sleep(3);return 0;}

输出结果

发送端:

接收端:

2. 测试代码:

发送端程序:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>int main(int argc, char *argv[])
{if(argc != 2) {fprintf(stderr, "Usage %s pid\n", argv[0]);exit(0);}pid_t pid = atoi(argv[1]);union sigval v;v.sival_int = 100;sigqueue(pid, SIGINT, v);sigqueue(pid, SIGINT, v);sigqueue(pid, SIGINT, v);sigqueue(pid, SIGRTMIN, v);sigqueue(pid, SIGRTMIN, v);sigqueue(pid, SIGRTMIN, v);sleep(3);kill(pid, SIGUSR1);return 0;
}

接收端程序:

#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>void handler(int sig);int main(int argc, char *argv[])
{printf("I'm %d\n", getpid());struct sigaction act;act.sa_sigaction = handler;sigemptyset(&act.sa_mask);act.sa_flags = 0;sigset_t s;sigemptyset(&s);sigaddset(&s, SIGINT);sigaddset(&s, SIGRTMIN);sigprocmask(SIG_BLOCK, &s, NULL);if(sigaction(SIGINT, &act, NULL) < 0) {perror("sigaction error");exit(0);}if(sigaction(SIGRTMIN, &act, NULL) < 0) {perror("sigaction error");exit(0);}if(sigaction(SIGUSR1, &act, NULL) < 0) {perror("sigaction error");exit(0);}for(; ;)pause();return 0;
}void handler(int sig)
{if(sig == SIGINT || sig == SIGRTMIN) printf("recv a sig = %d\n", sig);else if(sig == SIGUSR1){sigset_t s;sigemptyset(&s);sigaddset(&s, SIGINT);sigaddset(&s, SIGRTMIN);sigprocmask(SIG_UNBLOCK, &s, NULL);        }
}

输出结果:

发送端:

接收端:

函数sigqueue相关推荐

  1. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

  2. 信号发送函数sigqueue和信号安装函数sigaction

    一,sigaction() #include <signal.h>  int sigaction(int signum,const struct sigaction *act,struct ...

  3. linux 信号处理函数详解

    转自:http://blog.csdn.NET/sddzycnqjn/article/details/7285760 1. 信号概念  信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件 ...

  4. Linux信号编程实践(二) 信号发送函数和可重入函数

    在早期的UNIX中信号是不可靠的,不可靠在这里指的是:信号可能丢失,一个信号发生了,但进程却可能一直不知道这一点. 现在Linux 在SIGRTMIN实时信号之前的都叫不可靠信号,这里的不可靠主要是不 ...

  5. linux信号(signal) 机制分析

    1       信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. ...

  6. dat关闭某进程_超详细解析!工程师必会的Linux进程间通信方式和原理

    ▍进程的概念 · 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程. ▍进程通信的概念 · 进 ...

  7. Linux环境进程间通信(二): 信号--转载

    http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html http://www.ibm.com/developerworks ...

  8. UNIX再学习 -- 信号处理

    一.闹钟和睡眠 1.函数 alarm #include <unistd.h> unsigned int alarm(unsigned int seconds); 返回值:返回 0 或先前所 ...

  9. UNIX再学习 -- 信号

    终于讲到信号部分,很多比较重要的应用程序都需处理信号.第 9 章需要先了解信号机制再看,所以先跳过不讲.现在开始详解信号. 一.信号概念 信号是提供异步事件处理机制的软件中断. 这些异步事件可能来自硬 ...

最新文章

  1. linux传输文件无密码,Linux下scp无密码上传 下载 文件 目录
  2. 自定义报错返回_Spring Cloud Feign的使用和自定义配置
  3. java collections_扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法
  4. MSDN宝藏库中,初学者应该看的东西【整理的很辛苦哦】
  5. 海信电视root工具_中国企业的远见:用一项自主技术,打败日韩电视,成为行业引领者...
  6. 华为交换机端口不配置access_华为交换机如何配置端口组?华为交换机端口组-百度经验...
  7. poj 2922 Honeymoon Hike
  8. Give root password for maintenance 问题的解决方法
  9. zw版【转发·台湾nvp系列Delphi例程】.NET调用HALCON COM控件内存释放模式
  10. 基于python的MUSIC算法
  11. 人脸对齐—3DDFA
  12. 学Excel,一辈子这门课就够了
  13. Java 汉字获取拼音或首字母工具类
  14. REDIS04_主从复制概述及搭建、反客为主、薪火相传、原理、哨兵模式、集群搭建
  15. SIM 卡获取运营商信息
  16. 点线特征融合求取相机位姿
  17. 第五次网页前端培训(JavaScript)
  18. 微信小程序 - 布局基础
  19. 牛客网暑期ACM多校训练营(第四场)C(Chiaki Sequence Reloaded)
  20. windows 中 vpn连接提示, 虚拟专用网络 由于RAS/虚拟专用网络,服务器上配置的某个策略,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中的身份证验证方法不匹配

热门文章

  1. MST:Bad Cowtractors(POJ 2377)
  2. 平衡二叉树,AVL树之图解篇
  3. java 通道 双向原理_Java-NIO(四):通道(Channel)的原理与获取
  4. c语言常用英语单词大全下载,C语言实现英文单词助手
  5. windows和linux允许分片,请问hadoop的hdfs文件系统和本地windows文件系统或linux文件系统是什么关系啊,谢谢...
  6. java学习文档_资深程序员带你深入了解JAVA知识点,实战篇,PDF文档
  7. mysql查询含有某个值的表_MYSQL查询数据表中某个字段包含某个数值
  8. win10改成ubundu主题_如何将ubuntu引导win10,修改为win10引导ubuntu
  9. 图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...
  10. boost 变量类型转换