sigprocmask: 用于随时添加信号屏蔽字 ;

sigaction  : signal增强版本, 当处理信号时, 可以随意添加信号屏蔽字

   sigset_t newmask,oldmask,pendmask;signal(SIGINT,sig_handler);sigemptyset(&newmask);sigaddset(&newmask,SIGINT);//屏蔽SIGINT sigprocmask(SIG_BLOCK,&newmask,&oldmask);//按ctrl+cfor(int i =0 ; i < 3 ; ++i){sleep(1);write(1,".",1);}//SIGINT 是否置位sigpending(&pendmask);printf("pend sigint ?  %d\n",sigismember(&pendmask,SIGINT));puts("restore mask");//还原sigprocmask(SIG_SETMASK,&oldmask,NULL);puts("sigint unlock");while(1){sleep(1);write(1,".",1);}
void sig_handler(int sig,siginfo_t * info, void *p){printf("self pid:%d, send pid:%d , val:%d\n", getpid(),info->si_pid,info->si_value.sival_int);
}
int main(int argc , char ** argv , char ** env)
{struct sigaction act,oact;sigemptyset(&act.sa_mask);act.sa_flags =SA_SIGINFO;act.sa_sigaction = sig_handler;//act.sa_mask 用于屏蔽信号,当 sig_handler 被处理时sigaction(SIGUSR2,&act,&oact);pid_t  pid = getpid();printf("parent : %d\n", pid);if(fork() == 0){//子进程继承父进程 sigactionunion  sigval v = {0};v.sival_int = 1000;pid_t pid = getpid();printf("child pid:%d sending sig\n", pid);sigqueue(getppid(),SIGUSR2,v);raise(SIGUSR2);for(int i = 0; i < 3; ++i){sleep(1);write(1,"b",1);}exit(0);}while(1){write(1,".",1);sleep(1);}return 0;
}

sigprocmask sigaction相关推荐

  1. 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

     1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默 ...

  2. Linux信号控制-sigprocmask,sigsuspend,sigpending,sigaction,sigqueue

    写在前面:小生纯业余选手,开此博仅仅是为了积累,纯当笔记来用.如有看官光临小生博客,请不要相信我的代码就是正确的.如果您发现了错误也恳请耽误您一点时间,请您在下面指出来,不胜感激! 如果发现一些笔记的 ...

  3. Linux进程间通信(二):信号集函数 sigemptyset()、sigprocmask()、sigpending()、sigsuspend()...

    我们已经知道,我们可以通过信号来终止进程,也可以通过信号来在进程间进行通信,程序也可以通过指定信号的关联处理函数来改变信号的默认处理方式,也可以屏蔽某些信号,使其不能传递给进程.那么我们应该如何设定我 ...

  4. Linux捕捉信号机制之(signal,kill)、(sigaction,sigqueue)

    linux下公有64个信号,kill -l 查看一下: 可以看到,缺少了32.33两个未知信号,从这里分界,前面31个信号是不可靠信号,后面的是可靠信号.当进程发生阻塞的时候(一下子发送很多信号),不 ...

  5. sigsuspend sigprocmask函数的用法

    一个进程的信号屏蔽字规定了当前堵塞而不能递送给该进程的信号集.调用函数sigprocmask能够检測或更改其信号屏蔽字,或者在一个步骤中同一时候运行这两个操作. #include <signal ...

  6. sigaction函数学习

    sigaction(查询或设置信号处理方式) 相关函数 signal,sigprocmask() ,sigpending,sigsuspend, sigemptyset 表头文件 #include&l ...

  7. 【B站视频笔记】linux 进程间通信(ipc)信号(软中断信号)signal库函数、可靠信号和不可靠信号、信号集sigprocmask(信号掩码、信号递达Delivery、信号未决Pending)

    [视频教程]Linux信号详解(可靠信号.不可靠信号.阻塞信号.信号处理函数) [博文]Linux信号 文章目录 背景 课程笔记 一.如何让程序在后台运行 1.加"&"符号 ...

  8. UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数

    lienhua34 2014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...

  9. linux 信号signal和sigaction理解

    转载:http://blog.csdn.net/beginning1126/article/details/8680757 今天看到unp时发现之前对signal到理解实在浅显,今天拿来单独学习讨论下 ...

最新文章

  1. 第三代测序技术的主要特点及其在病毒基因组研究中的应用
  2. windows命令_用Windows恢复环境(WinRE)排除电脑故障,只需一条命令
  3. php去除英文和标点,php 过滤英文标点符号及过滤中文标点符号代码_php技巧
  4. 【LeetCode】【HOT】234. 回文链表(存入数组)
  5. Hibernate--Criteria Query and DetachedCriteria
  6. 批量根据实体类生成相关的类
  7. 未能加载文件或程序集或它的某一个依赖项。参数不正确
  8. 【细胞分割】基于matlab GUI阈值+边缘+形态学+种子点+主动轮廓图像分割【含Matlab源码 1477期】
  9. 昂达 android 刷机包,系统 基于安卓4.3全新ROM_昂达平板电脑_平板电脑评测-中关村在线...
  10. FPGA的NIOS-II
  11. mysql查看占用内存或者CPU高的SQL
  12. Quotes on Learing(求知若渴)
  13. 误删docker目录/var/lib/docker/overlay2,导致容器build失败
  14. Unity日志输出储存工具
  15. html实训报告致谢,毕业论文致谢信(精选10篇)
  16. win11鼠标文本选择光标变白色
  17. 百度的广告金主需要MarTech产品不?
  18. 国家lpv9服务器包括哪些项目,ipv6与ipv9什么关系
  19. 产品上架后,亚马逊运营应该做什么
  20. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。

热门文章

  1. Flame diagram
  2. 谷歌词霸首推2.0稳定版,谁用谁知道
  3. 农民工傻二听说林妹妹出家之后
  4. CSS position 属性:绝对定位与相对定位,以及浮动
  5. PowerPoint 2007无法输入中文
  6. Android 混合开发优缺点
  7. zabbix配置-使用-监控-告警
  8. linux中popen函数,system函数与popen函数
  9. dcl学习_dcl简介
  10. 将ViewBag的值传给Jquery函数做参数