一.信号的概念

  信号就是一种软中断,进程与进程之间信号的传递,都是通过内核来当做中转站的,不能直接传递信号。

二、信号的分类(128位信号,不过可用信号就1~64除去32与33)

  1.不可靠信号(SIGHUP(1)~SIGSYS(31)):由于他是非实时信号,所以他会产生多次信号,但不支持排队,并且只接受一次,因此信号有可能丢失,所以是不可靠信号。

  2.可靠信号(SIGRGMI(34)~SIGRTMAX(64)):由于他是实时信号,如果他产生多次信号,他会进行排队,信号会被全盘接受,信号不会丢失,所以是可靠信号。

三、信号的捕获与处理

   1.signal函数会注册一个信号处理函数,需要在程序开始时初始化,如果程序接受到信号时,这个函数就会启用。

   2.用fork函数创建的子进程会继承父进程的信号处理方式,当vfork和exec组成而创建的子进程不会继承父进程的信号处理方式。

四、信号的发送

  1.终端发送:kill  -sig  pid                  2.函数调用:int   kill(pid_t pid,int sig)

  3.有关时间的信号

    a.睡眠(pause):没有时间的限制,只有收到不可忽略的信号时,才会结束此函数,如果有信号处理函数,先执行信号处理函数,再返回-1

    b.睡眠(sleep):可手动控制时间的函数,若收到信号,则返回剩余的秒数,如没收到信号,则等时间过完,返回0

    c.时钟(alarm):闹钟一般需要与pause函数结合使用,当度过所设定的时间是,会返回一个SIGALRM信号,默认处理直接退出。

     

   

五、信号屏蔽

  1.信号集

    a.信号集的创建

      1)创建信号集  sigset_t*  set

      2)  填满信号集  sigfillset(sigset_t*  set)

      3)清空信号集  sigemptyset(sigset_t*  set)

      4)向信号集中添加信号   sigaddset(sigset_t*  set,int  signal)

      5)向信号集中删除信号 sigdelset(sigset_t*  set,int siganl)

      6)  测试信号集中的信号    sigismember(const   sigset_t*  set,int signal)

   2.屏蔽信号(signal mask)

    每一个进程都有一个屏蔽掩码 , 里面包含了进程的屏蔽信号。

    信号的屏蔽不是选择不接受信号,而是延时接受信号。

         延时接受:设置屏蔽掩码的目的是为了防止程序在进程一些敏感操作时,被打断。当处理完敏感操作后,就会接受信号。可靠信号会排队接受,不可靠信号只接受一次。

    int signprocmask(int how,const sigset_t *set,sigset_t * oldset)

功能:设置进程的信号掩码(信号屏蔽码)

how:修改信号掩码的方式

SIG_BLOCK:向信号掩码中添加信号

SIG_UNBLOCK:从信号掩码中删除信号

SIG_SETMASK:用新的信号集替换旧的信号掩码

newset:新添加、删除、替换的信号集,也可以为空

oldset:获取旧的信号掩码

int  sigpending(sigset_t *set)

   功能:获取未决状态的信号

六、计时器

操作系统维护了三个计时器

真实计时器:程序的运行时间

虚拟计时器:记录程序在用户态耗费的时间

实用计时器:记录程序在用户态和内核态耗费的时间和

真实  =  实用  +  进出的耗费  +  休眠。

int getitimer(int which, struct itimerval *curr_value);

功能:获取之间设置的定时任务

which:计时器的类型

ITIMER_REAL :真实时间,信号是:SIGALRM

ITIMER_VIRTUAL:虚拟,信号:SIGVTALEM

ITIMER_PROF :实用,信号:SIGPROF

curr_value:

it_interval:时钟信号的间隔时间

it_value:第一次时钟信号产生的时间

UNIX环境C - 系统信号的更多相关文章

  1. UNIX环境高级编程——信号说明列表

    $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGK ...

  2. Unix环境高级编程---信号

    参考博客:http://blog.csdn.net/alex_my/article/details/39494129 1. 信号概念 何为信号? 信号是一种软中断,可以由以下情形触发: -1: 用户按 ...

  3. UNIX环境高级编程——信号

    一.信号生命周期 从信号发送到信号处理函数的执行完毕. 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生:信号在进 ...

  4. UNIX环境高级编程——信号(API)

    一.信号在内核中的表示     实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号 ...

  5. UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数

    一.kill, raise, killpg 函数 int kill(pid_t pid, int sig); int raise(int sig); int killpg(int pgrp, int ...

  6. UNIX环境高级编程——信号基本概述和signal函数

    一.为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程.2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断.3. 如果CPU当前正在执行这个进程的代码,则 ...

  7. 高级UNIX环境编程10 信号

    信号是软件中断,提供一种处理异步事件的方法 <signal.h> sigaction()

  8. UNIX环境高级编程——sigqueue、sigsuspend函数

    一.sigqueue函数 功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用. int sigqueue(pid_t pid, int sig, ...

  9. (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. python 并发编程 IO模型介绍

    gevent 底层是怎么实现? io模型4个重要概念: 两类 一类:同步.异步 提交任务的方式 同步: 提交完任务后,在原地等待结果,拿到结果后,才执行下一行代码 #所谓同步,就是在发出一个功能调用时 ...

  2. excel常用公式--计算统计类

    Count/Countif/Countifs:条件计数. 注:count只能对数值进行统计 sum/sumif/sumifs:条件求和.   Average/Averageifs:  返回参数的平均值 ...

  3. HDU 2094 产生冠军(STL map)

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. PostgreSQL通过解析日志,获取数据库增量变化,pg_recvlogical

    1.首先用该工具来看我们的日志变化,需要先将test_decoding插件编译并安装(进入contrib,编译安装即可) 创建一个slot: SELECT * FROM pg_create_logic ...

  5. MySQL-4- 索引及执行计划

    1. 索引作用 提供了类似于书中目录的作用,目的是为了优化查询 2. 索引的种类(算法) B树索引 Hash索引 R树 Full text GIS 3. B树 基于不同的查找算法分类介绍   B-tr ...

  6. 多个电脑上免密登陆命令、scp远程拷贝、修改文件的用户和组

    多个电脑上免密登陆命令: 1.ssh-keygen    生成密钥 2.ssh-copy-id   IP 拷贝公钥到指定服务器并授权 3.ssh   Ip 验证登录,已无需输入密码 scp远程拷贝: ...

  7. python生成饼图解决中文乱码

    解决乱码问题 乱码的原因 字体的不匹配 解决的方法 加上引用中文字体就好了 matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 代码 def sta ...

  8. Python基础数据类型int

    整型int 赋值运算符 a=1 a+=1 #a=a+1 a-=1 #a=a-1 a*=1 #a=a*1 a/=1 #a=a/1 a**=1 #a=a**1 a%=1 #a=a%1 算数运算符 + - ...

  9. javaweb: request.getParameter()、request.setAttribute()与request.getAttribute()的作用 (转)

    出处:https://blog.csdn.net/qq_41937388/article/details/87972914 1.request.getParameter()方法是获取通过类似post, ...

  10. Codeforces1256E_Yet Another Division Into Teams

    题意 n个人,每人有一个能力值a[i],要求分成多个队伍,每个队伍至少3个人,使得所有队伍的max(a[i])-min(a[i])之和最小. 分析 不会巧妙的dp,想了一天只想到了暴力的dp. 先排序 ...