| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 【Linux】进程信号 -> 正文阅读 |
|
[系统运维]【Linux】进程信号 |
目录 信号的概念信号只是告诉我们有这样一个信号,但是具体这个信号如何处理,什么时候处理是由进程决定的,所以是软中断。 种类可以通过kill -l命令来查看所有信号。 注意:总共有62个信号,没有32和33号信号。 其中1-31号信号被称之为非实时信号,也叫非可靠信号,它在使用的过程中信号可能会丢失。34-64号信号被称为实时信号,也叫可靠信号,它在使用过程中信号不会丢失。 信号的产生硬件产生方式1、Ctrl + c 产生的是2号信号SIGINT,是一个中断信号。 2、Ctrl + z 产生的是20号信号SIGTSTP,是一个暂停信号。 3、Ctrl + \ 产生的是3号信号SIGQUIT,是一个暂停信号。 4、kill命令向进程发送信号 通过kill -[信号值] [pid]向进程发送信号。 软件产生方式?1、kill函数
?? 2、raise函数
根据信号值判断代码出错的原因在之前gdb调试的时候,有一种情况就是对崩溃后产生的coredump文件进行调试,进而确定程序崩溃原因。产生coredump文件的方式以及限制因素:
1、解引用空指针、野指针(垂悬指针) ?2、除0 3、越界访问 4、double free 信号的处理方式?1、通过man 7 signal查看操作系统对信号的处理方式。 2、默认处理方式?
?3、忽略处理方式
?4、自定义处理方式 程序员可以更改信号的处理方式,定义一个函数,当进程收到该信号的时候,调用程序员自己写的函数。 信号的注册概念:一个进程收到一个信号,这个过程称之为信号的注册。信号的注册和注销时两个独立的过程。 内核中信号注册位图以及sigqueue队列的理解:
如图: ?既然数组的一个元素就可以搞定,为何又大费周章,给一个数组呢? 原因是为了后续可能会扩展的信号提供空间。 注册
非实时信号注册:
?实时信号注册:
信号的注销?非可靠信号:
可靠信号 :
信号的自定义处理方式?让程序员自己定义某一个信号的处理方式,当进程收到该信号后就会执行程序员自定义的处理方式。 1、signal函数?
? 2、sigaction
后两个参数都是一个结构体指针:
?结合内核理解: 信号阻塞?信号的注册是信号的注册,信号阻塞时阻塞。信号的阻塞并不会影响信号的注册。进程收到这个信号之后,由于阻塞,暂时不处理该信号。 内核代码:
?sigset_t blocked是一个位图,当要阻塞一个信号的时候,将该信号对应的比特位设置为1即可。 接口:
函数原理解析:当how为SIG_BLOCK时,函数会根据set,计算新的阻塞位图,计算方式是:block(old) | set;当how为SIG_UNBLOCK时,函数会根据set,计算新的阻塞位图,计算方式是:block(new) = block(old) & (-set);当how为SIG_SETMASK时,函数会根据set,计算新的阻塞位图,计算方式是:block(new) = set。 可以通过kill -9将进程杀死。
信号的捕捉流程信号的处理时机:
处理信号时,不同的处理方式:
如图所示:? ? ?常见的进入系统内核的方式: 调用系统调用函数;内存访问越界,访问空指针;调用库函数 其他扩展内容:1、之前学习的进程等待,父进程在等待子进程退出,回收它的状态信息的时候,有两种方式,分别是:
这两种方式父进程在等待子进程期间都是无法执行其他代码的,导致父进程的效率低下,我们可以使用信号的方式来解决这个问题:
? ? ? 2、volatile关键字
加上volatile关键字后,每次都会从内存中读取数据。? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/15 23:23:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |