[学习笔记]可靠信号与不可靠信号编程实践


可靠信号、不可靠性信号的观察


综合案例

1、  创建子进程和父进程

2、  注册SIGINT非实时信号  SIGRTMIN 实时信号 添加到到进程阻塞中

3、  注册用户自定义信号SIGUSR1

4、  子进程发送3次非实时信号,发3次实时信号

5、  子进程发送 SIGUSR1解除信号阻塞;

6、  观察实时信号和非实时信号的表现与区别!

7、


man手册sigaction中

struct sigaction {

void (*sa_handler)(int);

void (*sa_sigaction)(int, siginfo_t *, void *);

sigset_t sa_mask;

int sa_flags;

void (*sa_restorer)(void);

}

flags关键字选项很多,能让sigaction函数很强大。。。。

请你仔细阅读man手册看flags意思


三种睡眠函数


q  unsigned int sleep(unsigned int seconds); 秒

若被中断打断,返回剩余时间

q  int usleep(useconds_t usec); 微妙

若被中断打断,返回剩余时间

q  int nanosleep(const struct timespec *req, struct timespec *rem);纳秒时间

要睡眠的时间req;剩余睡眠时间,如果要中断,通过rem返回过来。


三种时间结构

time_t  秒

struct timeval {

long    tv_sec;         /* seconds */

long    tv_usec;        /* microseconds */微妙

};

struct timespec { 纳秒

time_t tv_sec;        /* seconds */

long   tv_nsec;       /* nanoseconds */

};


setitime函数: 间隙性产生

q  包含头文件<sys/time.h>

q  功能setitimer()比alarm功能强大,支持3种类型的定时器

q  原型:

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));

q  参数

q  第一个参数which指定定时器类型

q  第二个参数是结构itimerval的一个实例,结构itimerval形式

q  第三个参数可不做处理。

q  返回值:成功返回0失败返回-1

q  ITIMER_REAL:经过指定的时间后,内核将发送SIGALRM信号给本进程

q  ITIMER_VIRTUAL :程序在用户空间执行指定的时间后,内核将发送SIGVTALRM信号给本进程

q  ITIMER_PROF :进程在内核空间中执行时,时间计数会减少,通常与ITIMER_VIRTUAL共用,代表进程在用户空间与内核空间中运行指定时间后,内核将发送SIGPROF信号给本进程。


思考why ITIMER_PROF存在?


(备注:一般指cpu运行时间,比如,cpu在运行一段时间后,产生信号给本进程。。。。可见,是需要这样的信号)。

复制去Google翻译翻译结果

时间: 2024-10-12 07:12:46

[学习笔记]可靠信号与不可靠信号编程实践的相关文章

APUE学习笔记——10.可靠信号与不可靠信号

首先说明:现在大部分Unix系系统如Linux都已经实现可靠信号. 1~31信号与SIGRTMIN-SIGRTMAX之间并不是可靠信号与不可靠信号的区别,在大多数系统下他们都是可靠信号. 只不过: 1~31信号                              --不支持排队,为普通信号. SIGRTMIN-SIGRTMAX信号 --支持排队,实时信号 不可靠信号 什么是不可靠信号: 不可靠的意思是信号可能丢失或者被错误处理. 在早起系统中,信号存在两大缺陷,导致了信号不可靠. 缺陷一:

[学习笔记]可靠信号、不可靠信号

不可靠信号PK可靠信号 q  linux信号机制基本上是从unix系统中继承过来的.早期unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: q  进程每次处理信号后,就将对信号的响应设置为默认动作.在某些情况下,将导致对信号的错误处理:因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号. q  早期unix下的不可靠信号主要指的是进程可能对信号做出错误的反应以及信号可能丢失. q  linux支持不可靠信号,但是

终端控制和和信号——《Unix/Linux编程实践教程》读书笔记(第6章)

1.有些程序处理从特定设备来的数据.这些与特定设备相关的程序必须控制与设备的连接.Unix系统中最常见的设备是终端. 2.终端驱动程序有很多设置.各个设置的特定值决定了终端驱动程序的模式.为用户编写的程序通常需要设置终端驱动程序为特定的模式. 3.键盘输入分为3类,终端驱动程序对这些输入做不同的处理.大多数建代表常规数据,它们从驱动程序传输到程序.有些键调用驱动程序中的编辑函数.如果按下删除键,驱动程序将前一个字符从它的行缓冲中删除,并将命令发送到终端屏幕,使之从显示器中删除字符.最后,有些键调

蛋哥的学习笔记之-基于Unity的Shader编程:X-1 音乐水波特效

蛋哥的学习笔记之-基于Unity的Shader编程:X-1 音乐水波特效 热度 13728 2015-7-11 23:34 |个人分类:蛋哥的学习笔记之-基于Unity的Shader编程| 音乐, Unity, Shader, 水波, Shader, Shader, Shader, Shader 一.要干些啥: 很久很久没有写文档了,前段时间做了个个人很喜欢的,自认为比较原创的小特效,所以写个文档纪念下(本人特别喜欢音乐) 思路其实很简单,首先用顶点着色器实现一般的水波特效,然后解析音频数据(我

APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号

如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_t set表示. 数据类型:sigset_t 类似于整型(位数可能超过整型,因而不能用整型表示). 我们一般在sigprocmask()等函数中使用信号集,用于创建一系列进程要阻塞的信号,告诉内核不允许这些信号发生. 几个关于信号集的函数: #include <signal.h> int sige

C++学习笔记(六):高级编程:模板,预处理器,信号处理,多线程,Web编程

模板 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式. 库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如vector <int>和vector <string>. 您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用. 函数模板 模板函数定义的一般形式如下所示: template <class type>

Xilinx FPGA 学习笔记一-chipscope 无法观察信号 BUFG

今天开始试着使用chipscope,写了一个简单的流水灯的例程,开始综合布线的时候没有问题,但是加上chipscope 以后,综合就总报错. 第一种情况:用chipscope不可以直接观察全局时钟信号,即BUFG信号-----X 错误如下: ERROR:Place:1136 - This design contains a global buffer instance, <PLL_u0/clkout1_buf>, driving the net, <CLK_OUT1>, that

bb_black_学习笔记&mdash;&mdash;(6)建立Eclipse编程环境

最近学习了一个编程环境,感觉到非常方便,分享给大家.之前的几篇笔记都是通过Xshell工具远程登录开发板,在开发板上进行代码的编写,编译运行.好处就是对于初学者来说不需要搭建太多的开发环境,不好的地方,Linux自带的VIM编辑器是没有语法高亮的,代码量比较多的时候,用起来不是很方便.根据网上一些点子,安装Eclipse C/C++,没想到用过后感觉非常好,起码现阶段是认可.特别是对我这种初学者来说,真的觉得方便.好用. 我的基本环境是Windows7+Eclipse C/C.以下是网友的搭建步

Scala学习笔记(1) -- 为什么要学函数式编程

很久之前我就学过Lisp和Erlang,但是也就是写写HelloWorld,写个排序算法.也在Coursera上听过Scala的课,可是那时候我还不怎么用Java,所以后来也没怎么继续.可是对函数式编程的兴趣一直不减,工作中几乎不会用Scala,但是用的是Java,我一直在想着怎么把Scala用到工作中.最近在写一个工具,因为这个工具基本只有我们项目组用,而且很简单,所以我就用Scala写了.以后有机会,把Scala用在生产上. 为什么对函数式编程这么感兴趣呢. 第一个原因,可以装逼,或者说是个