可靠信号、不可靠性信号的观察 |
综合案例 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在运行一段时间后,产生信号给本进程。。。。可见,是需要这样的信号)。 |