一.信号的概念

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

二、信号的分类(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. USACO2.1 Hamming Codes【枚举+二进制处理+输出格式+题意理解】

    这道题加了2个看起来奇奇怪怪的$tag$ 1.输出格式:不得不说这个格式输出很恶心,很像$UVA$的风格,细节稍微处理不好就会出错. 因为这个还$WA$了一次: ,m=n; ) { ;i<=t+ ...

  2. Mysql 字段类型与查询类型不一致导致索引使用失败

    今天优化数据库的慢查询,有一条Sql让我百思不得其jie,就是他了. SELECT * FROM test WHERE user_id=1; 用explain 去分析一下 索引都有了,为什么还要扫描全 ...

  3. 深入理解java:2.4. 线程本地变量 java.lang.ThreadLocal类

    ThreadLocal,很多人都叫它做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多. 可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那样每个线程可以访问自己内 ...

  4. session 的理解

  5. Excel透视表基础之数据源、创建、基本术语、基本操作

    数据源的基本要求: 每列数据的第一行包含该列标题 不能包含空行或空列 不能包含空单元格 不能包含合并单元格 不能包含同类字段 如果包含空行.空列则删除空行和空列.如果包含空单元格则填充空单元格. 如果 ...

  6. Git 的这个神技,学会爽歪歪~

    现在大多数公司都有 GIT 来管理代码版本控制了,既然用到 GIT,相信大家都接触过 Github.Gitlab.Gitee 这些远程仓库,或者是公司内部自行搭建的 GIT 仓库. 当用到 SSH 方 ...

  7. jmeter---linux安装运行

    安装jdk 安装jmeter 配置环境变量: export JAVA_HOME=/usr/java/1.8.0_181 export CLASSPATH=.:JAVA_HOME/lib/dt.jar: ...

  8. java 使用面向对象方式实现录入学生信息,取出成绩最大值、最小值、平均值、对其进行排序

    题目: java 使用面向对象方式实现录入学生信息,取出成绩最大值.最小值.平均值.对其进行排序 gitup源码下载地址: https://github.com/benxiaohai8888/Java ...

  9. 如何写一个 Burp 插件

    Burp 是 Web 安全测试中不可或缺的神器.每一个师傅的电脑里面应该都有一个 Burp.同时 Burp 和很多其他神器一样,它也支持插件.但是目前总体来说网上 Burp 插件开发的资料不是特别特别 ...

  10. 简单告诉你-"border:0"与"border:none"的区别

    "border:0"与"border:none"的差异主要体现在性能差异和兼容差异.1.性能差异"border:0"表示把border定义为 ...