导图社区 信号思维导图
这是一篇关于信号思维导图,介绍了信号状态、信号控制、捕捉信号、重入操作、竞态条件等。
这是一篇关于考研数学必会禁忌搜索的思维导图,主要内容包括:禁忌搜索概念,禁忌搜索在考研数学中的应用,必会知识点,禁忌搜索技巧,禁忌搜索的禁忌点,禁忌搜索的优化策略,考研数学复习策略。
这是一篇关于考研数学必会纠错码的思维导图,主要内容包括:纠错码的基本概念,考研数学中的纠错码应用,纠错码在考研数学中的重要性,考研数学复习策略,考研数学复习资源,考研数学考试技巧。
这是一篇关于考研数学必会矩母函数速通的思维导图,主要内容包括:矩母函数定义,矩母函数的计算,矩母函数的应用,矩母函数与特征函数,矩母函数的计算技巧,矩母函数的常见分布,矩母函数的局限性,矩母函数的练习题,矩母函数的学习资源。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
信号
信号状态
kill -l可以列出信号类型
接受后保存在进程的PCB中,内核首先读取这个,再觉得之后操作
产生方式:软件超时; 硬件异常;终端接受键盘命令;kill;
信号控制
信号处理,和用户进程异步,不在同处理堆
处理方式:忽略; 默认; sigaction返用户态,称 catch;
阻塞
取消阻塞后称递达
阻塞前未决,信号产生未决标志位就会变为1表示信号正在被阻塞,后者依靠前者
未决和阻塞标志可以用相同的数据类型sigset_t,
#include <signal.h>int sigpending(sigset_t *set);
读取未决信号集,返回状态
捕捉信号
进行下一步动作
int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);
oact是旧结构体
pause处理,挂起至信号抵达,信号处于忽略状态。继续挂起,只如果信号的处理动作是捕捉,则调用了信号处理函数之后pause返回-1,errno设置为EINTR,在程序中作用之所查看是否有其他中断信号
重入操作
函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入
大多不可重入的,调用了malloc或free,因为malloc也是用全局链表来管理堆的。调用了标准I/O库函数。
竞态条件
int sigsuspend(const sigset_t *sigmask);errno
挂起和解除屏蔽同时进行,信号屏蔽字由sigmask参数指定(蔽or不弊),SIGALRM递达后suspend返回,自动恢复原来的屏蔽字,之后要手动还原
原子操作,防止错乱
一此步骤完成,原子操作。
序要求严格
volatile sig_atomic_t
多流程控制时,编译器优化单一流程没有改变a值,就不需要重复读取(不知道外部还有),因此原子操作时应该加上volatile,防止优化
自由主题
struct sigaction {
void (*sa_handler)(int);可以为SIGIGN ,sigdef,也可以自己注册一个函数,被系统调用
sigset_t sa_mask; 通过signadd自己添加的额外需要屏蔽的信号,捕捉的信号处理完可以恢复元屏蔽位
int sa_flags; /* signal options, Figure 10.16 */
void (*sa_sigaction)(int, siginfo_t *, void *);
改变信号屏蔽字
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oset);
信号操作集
set为需要设置的信号集,通过sigaddset加入,oset有指向就把原来的信号屏蔽字储存
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signo);
int sigdelset(sigset_t *set, int signo);
int sigismember(const sigset_t *set, int signo);
阻塞和未决(到达或忽略)标志位
signal
#define SIG_ERR (void (*)())-1
#define SIG_DFL (void (*)())0
#define SIG_IGN (void (*)())1