Linux Signals 进程信号简介
2019独角兽企业重金招聘Python工程师标准>>>
在Linux中,signal是一种局限较强的进程间通信方式。
主要有三种类型:
1. 从hardware signal到POSIX signal
hardware signal也叫hardware interrupt,CPU中存放着 interrupt vectors 指向 存放在kernel space中的interrupt handling routine。
例: 键盘输入;segmentation fault -> SIGSEGV
2. 直接从kernel生成的POSIX signal
例:exit() -> SIGCHLD
3. 从一个进程发起到另一个进程的signal
例:进程885 执行了 “kill 1234” 代码
POSIX signal
1. Generated from CPU to kernel, or from CPU to processes
例 1: Segmentation fault.
The signal is labeled SIGSEGV, which comes from CPU to kernel then to process.
例 2: Floating point exception (e.g., divided by 0).
The signal is labeled SIGFPE, which is coming from CPU to process
2. From kernel to process
例: Child process termination.
The signal is labeled SIGCHLD, which is coming from the kernel to process
3. Generated from one process to another
例: From terminals: E.g., “Ctrl C”, “Ctrl Z”
Using programs: E.g., “kill”, “top”, etc.
Using the “kill()” system call.
一些典型的signal
Asynchronous signal: 异步信号
– The signal received is NOT generated by the process itself。 So, its arrival time is usually not deterministic
– E.g., External hardware interrupt, another process sends ctrl-c
Synchronous signal: 同步信号
– The signal is caused by the process itself, its arrival time is usually deterministic
– E.g., A certain line leads to SIGFPE
– E.g., A certain line accesses a memory region: SIGSEGV
kill() 方法
用于给特地进程发送POSIX signal
signal() 方法
更新当前进程的特定signal的处理方法,即signal handler
例:写个无法“Ctrl+C”中止的小病毒
#include <stdio.h>
#include <signal.h>void sig_handler(int sig) {if(sig == SIGINT)printf("\nCtrl + C\n");
}int main(void) {signal(SIGINT, sig_handler);printf("Press enter\n");getchar();printf("End of program\n");return 0;
}
通常情况下,我们希望当signal handler处理完signal后,程序恢复到之前执行的地方;而有时候,则希望程序继续运行下去。
signal的检查方法
一个进程如何知道它收到了一个特定的signal?
在kernel space中,有一个bitmask
进程会不定期地去检查这个bitmask,如果看到是1,则调用对应的handler,并重置为0。
因此,发送signal和处理signal是异步的。
pause()方法
The pause() system call suspends the calling process until a signal is received. 等待一个信号
有益的重写signal handler
重写SIGINT的handler,保证进程在被用户ctrl-c 中止之前,进行一些必要的清理工作比如 关闭数据库连接等。
alarm()方法
设置一个“闹钟”在指定时间后“响”起。
通过在hardware设置一个闹钟,到达时间后,hardware的signal会转换成SIGALRM signal发送给进程,默认的处理方式是结束当前进程。
alarm()是一次性的,如果需要周期性的,则使用 settimer()方法
转载于:https://my.oschina.net/Bruce370/blog/885260
Linux Signals 进程信号简介相关推荐
- 【Linux】进程信号“疑问?坤叫算信号吗?“
鸡叫当然也算信号啦~ 文章目录 前言 一.认识信号量 二.信号的产生 1.调用系统函数向进程发信号 2.由软件条件产生信号 3.硬件异常产生信号 总结 前言 信号在我们生活中很常见,下面我们举一举生活 ...
- linux 之进程信号
1 信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. ...
- 【Linux】进程信号
目录
- Linux 中进程的管理
Linux 的进程信号 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能终止 17 STOP 无条件终止运 ...
- linux忽略的信号可以被子进程继承,linux – 可以忽略(丢失)信号吗?
我有一个通过信号与工人沟通的应用程序(特别是SIGUSR1 / SIGUSR2 / SIGSTOP). 我能相信无论发生什么,每个信号都将由处理程序传递和处理吗? 如果信号的发送速度快于应用程序处理信 ...
- Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...
- linux使进程不依赖终端,Linux nohup命令应用简介--让Linux的进程不受终端影响
nohup命令应用简介--让Linux的进程不受终端影响 by:授客 QQ:1033553122 #开启ping进程 [root@localhost ~]# ping localhost & ...
- linux 查看进程的信号,Linux 进程信号查看与控制
Linux 进程信号查看与控制 1) SIGHUP 本信号在用户终端连接 (正常或非正常) 结束时发出 通常是在终端的控制进程结束时 通知同一 session 内的各个作业 这时它们与控制终端不再关联 ...
- Linux 进程信号详细总结
信号:信号是进程之间事件异步通知的一种方式,是一个软中断 作用:操作系统通过信号告诉进程发生了某个事件,打断进程当前的操作,去处理这个事件 信号在我们生活中无处不在,例如交通上的红绿灯,学校上下课的铃 ...
最新文章
- HTC VIVE SDK 中的例子 hellovr_opengl 程序流程分析
- 剑指_数组中出现次数超过一半的数字
- LeetCode Basic Calculator II(加减乘除计算器)
- Linux系统及编程期末试题,《LINUX系统及其编程》考试试题及答案.doc
- Java final、static final 讲解
- SSO CAS 探究
- TIOBE开发语言排行榜
- 安装Sarge(二) 配置基本系统
- nvidia-rapids︱cuGraph(NetworkX-like)关系图模型
- android语音控制歌曲播放,Amazon Music应用程序已支持Alexa语音控制歌曲播放
- 【牛客网SQL篇】SQL必知必会
- 驱动人生病毒清除教程
- 用公式编辑器打的公式变大了怎么办?
- linux 图片压缩命令,Linux:优化和压缩JPEG和PNG图片的命令行工具
- php excel 导入图片,利用php实现读取excel中的图片
- 导出公众号历史文章,批量下载微信公众号数据分析
- App 抓包利器:Charles 以及 App 爬虫心得
- 数据结构—栈与队列【顺序存储、链式存储、卡特兰数、优先级队列】
- 计算机的串口波特率,什么是波特率_波特率9600是什么意思_串口通信为什么要设置波特率?...
- 实现学习高效率,你需要这些更高效的学习APP!
热门文章
- 这几个技巧让你做出让导师眼前一亮的答辩 PPT
- kinux查日志_Linux实时查看日志的四种命令详解
- 自定义Matlab功能函数——10进制整数矩阵转二进制字符矩阵
- PDF转换器安装教程
- 安装 | R2021a链接及Matlab运行图
- 4由通道检测_十堰城区108处桥隧通道接受全面“体检”将持续至8月底
- 工业用微型计算机(25)-伪操作(1)
- python3精要(5)-最长公共前缀Trie树
- 【学术相关】人工智能顶会审稿现状—理想中的审稿人vs实际审稿人
- 【时间序列】再次出发!FaceBook 开源一站式服务时序利器 Kats !