进程间通信--信号(SIG)
信号是内容受限的一种异步通信机制
- 信号的目的:用来进程间的通信
- 信号本质上是int型数字编号(事先定义好的);所以说是内容受限的通信机制
- 信号是异步的(可以类比于硬件中断)
常见信号介绍
- SIGINT 2 Ctrl+C时OS送给前台进程组中每个进程
- SIGABRT 6 调用abort函数,进程异常终止
- SIGPOLL SIGIO 8 指示一个异步IO事件,在高级IO中提及
- SIGKILL 9 杀死进程的终极办法
- SIGSEGV 11 无效存储访问时OS发出该信号
- SIGPIPE 13 涉及管道和socket
- SIGALARM 14 涉及alarm函数的实现
- SIGTERM 15 kill命令发送的OS默认终止信号
- SIGCHLD 17 子进程终止或停止时OS向其父进程发此信号
- SIGUSR1 10 用户自定义信号,作用和意义由应用自己定义
SIGUSR2 12
信号的处理方式
- 忽略信号
- 捕获信号(信号绑定了一个信号处理函数)
- 默认处理(忽略或终止进程)
相关函数
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
* 用于注册信号处理函数的函数
* 第一个参数是所相应的信号编号(见上)
* 第二个是函数指针,用于中断时候的回调
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
* 用于给其他进程发信号的函数
* 第一个参数是发给 对应进程的PID
* 第二个参数是对应的信号编号(见上)
#include <unistd.h>int pause(void);
- 使得程序挂起
- 收到信号时继续执行
内核挂起,让出 cpu
#include <unistd.h>unsigned int alarm(unsigned int seconds);
- 设置一个闹钟
- 到时间后发出SIGALRM信号
demo:
void signal_deal(int sig)
{if(sig == SIGINT)printf("%s\n", "crtl+c dectected!");
}int main(int argc, char const* argv[])
{signal(SIGINT, signal_deal);signal(SIGQUIT, signal_deal);for(;;);return 0;
}
进程间通信--信号(SIG)相关推荐
- Linux进程间通信——信号
一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...
- Linux进程间通信--信号
signal 一.初步理解信号 为了理解信号 ,先从我们最熟悉的场景说起: 1.用户输入命令,在Shell下启动一个前台进程. 2.用户按下Ctrl-C,这个键盘输入产生一个硬件中断. 3.如果CPU ...
- python进程间通信--信号Signal
信号signal 是python进程间通信多种机制中的其中一种机制.可以对操作系统进程的控制,当进程中发生某种原因而中断时,可以异步处理这个异常. 信号通过注册的方式'挂'在一个进程中,并且不会阻塞该 ...
- Linux环境进程间通信---信号(下)
一.信号生命周期 从信号发送到信号处理函数的执行完毕 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生:信号在进程 ...
- 进程间通信————信号
信号 信号是在软件层次上对中断机制的一直模拟,是一种异步通信方式 linux内核通过信号通知用户进程, 不同的信号类型代表不同的事件 进程对信号有不同的响应方式 缺省方式 忽略信号 捕捉信号 SI ...
- Linux进程间通信(管道、消息队列、共享内存、信号、信号量)
目录 Linux进程间通信概述 1.管道 无名管道(pipe) 有名管道(fifo) 2.消息队列(msg) 消息队列的通信原理 消息队列相关api 消息队列收发数据 键值生成 消息队列移除 3.共享 ...
- linux之进程间通信--使用信号
一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...
- linux 进程间广播,Linux系统编程之进程间通信之浅谈信号
我们接着谈Linux学习过程中一个重要的话题--信号. 一.信号的概念: 信号是一种软件中断,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式. 二.信号的来源: 1.硬件方式: 当用户按 ...
- 【Linux】一篇文章搞定 进程间通信 之 信号机制
1. 信号的概念 信号的概念理解: 信号是一个程序中断 信号的种类:使用Kill -l 命令可以查看有多少个信号 [gongruiyang@localhost TestSignal]$ kill -l ...
最新文章
- 电子火折子的原理,了解一下?
- centos 7 yum安装mysql完整过程记录
- 客户端用mstsc不能用一台设备连接终端服务器的解决办法
- java中数组的返回值是什么类型_面试必问:Java中String类型为什么设计成不可变的?...
- Luogu2467 SDOI2010 地精部落 DP
- ES6 变量解构赋值
- 动态连接_二维动画动态连接基础
- 算法 判断多个点是否在同一圆周线上_广州灵活计费自动出盘机技术方案大盘点...
- 课后答案︻︼─一大收集
- and or not 优先级_EXCEL函数与公式剖析:AND
- oracle中的或者是什么,oracle中=是什么意思呢?
- workman 搭建tcp服务器,和websocket互相通信
- android开发面试题!360°深入了解Flutter,面试总结
- 对于“高德地图”的使用感受
- Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端
- windows系统mysql安装教程<手把手教学>
- 一度智信:拼多多平台开网店怎么收费?
- 让自己学会有效管理时间
- NLP点滴——文本相似度
- Android 仿直播特效点赞飘爱心
热门文章
- ios c语言编译环境搭建,iOS开发之runtime(一):runtime调试环境搭建
- ftp无法与服务器建立连接_建立与Oracle数据库服务器连接的两种连接模式
- bitmap画文字 居中_画非画展览馆 观赏石 第八期拍卖
- 工业镜头选型计算公式_工业冷水机组制冷量的计算公式是什么?
- java数据分析平台源码_DataGear数据可视化分析平台 v2.0.0
- vue2.0项目中使用Ueditor富文本编辑器应用中出现的问题
- 深入剖析C++多态、VPTR指针、虚函数表
- VC里的#define new DEBUG_NEW
- 前台如何解析json格式 以及后台如何生成json格式
- 几个 ASP.NET 小技巧