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

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

综合案例

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在运行一段时间后,产生信号给本进程。。。。可见,是需要这样的信号)。

原文地址:https://www.cnblogs.com/shichuan/p/4448069.html