| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux-信号(重入volatile关键字) -> 正文阅读 |
|
[系统运维]Linux-信号(重入volatile关键字) |
种类:使用kill -l(查看linux信号种类)---62种 非可靠信号/非实时信号: 1~31; 可靠信号/实时信号:34~64; 信号生命周期产生->注册->注销->处理 产生
注册
注销删除待处理的未决信息,一个是位图,还有一个链表(统计收到多少个相同的信号)
处理运行信号的处理函数,每个信号处理函数不一样,而且它是可以修改的 信号的处理方式:
signum:要修改的处理方式的信号的值 handler:?函数指针 SIG_DFL-默认/SIG_IGN-忽略 其他:程序运行从用户态切换到内核态:系统调用,异常,中断 如果当前运行的是用户自己写的代码或者库函数就运行在用户态,如果是系统调用,或者中断/异常的处理就是内核态。 自定义处理方式的信号捕捉流程:
信号的阻塞阻止当前有的未决信号的处理,有信号注册但是当前不处理,等到解除阻塞之后再处理,在pcb中有一个block阻塞信号集合,将哪个信号添加到集合中,就表示哪个信号就算到来了也暂时不处理
参数how
new:要添加/移除阻塞的信号集合; old:用于接受修改前block中的信号 getchar();等待一个回车,没有回车就一直等待
在进程中有两个信号是不可被阻塞;不可被修改处理方式 SIGKILL和 SIGSTOP 那么一个进程kill杀不死的原因是什么? 1.僵尸进程2。信号被修改处理方式;3.信号被阻塞 应用: 僵尸进程的处理 (sigcb(){while(waitpid(-1,NULL,WNOHANG>0);} signal(SSIGCHLD,SIG_IGN);//用户的显示忽略 子进程退出之后,父进程为什么没有关心到子进程退出状态? 本质上就是子进程退出之后实际上给父进程发送了一个信号-SIGCHLD,然而SIGCHLD信号的默认处理方式就是忽略,相当于父进程实际收到了通知但是什么都没做 ? 2.所有管道读端关闭则write触发异常---SIGPIPE volatile?作用:用于修饰变量,保持变量内存可见性 cpu处理数据时,总是保证重新从内存中加载数据进行处理 函数重入函数重入:一个函数在不同的执行流程中同时进入执行 ????????可重入函数:一个函数就算重入也不会造成预期之外的结果 ????????不可重入函数:一旦函数重入就有可能会出现预期之外的结果 函数的可重入与不可重入的判断基本点: 一个函数内部如果对全局数据进行了不受保护的非原子操作,则这个函数就是不可重入函数。 要使函数可重入,尽量使用局部变量,或者保护的全局变量,以及原子操作。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 7:44:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |