信号是内容受限的一种异步通信机制

  • 信号的目的:用来进程间的通信
  • 信号本质上是int型数字编号(事先定义好的);所以说是内容受限的通信机制
  • 信号是异步的(可以类比于硬件中断)

常见信号介绍

  1. SIGINT 2 Ctrl+C时OS送给前台进程组中每个进程
  2. SIGABRT 6 调用abort函数,进程异常终止
  3. SIGPOLL SIGIO 8 指示一个异步IO事件,在高级IO中提及
  4. SIGKILL 9 杀死进程的终极办法
  5. SIGSEGV 11 无效存储访问时OS发出该信号
  6. SIGPIPE 13 涉及管道和socket
  7. SIGALARM 14 涉及alarm函数的实现
  8. SIGTERM 15 kill命令发送的OS默认终止信号
  9. SIGCHLD 17 子进程终止或停止时OS向其父进程发此信号
  10. 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)相关推荐

  1. Linux进程间通信——信号

    一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...

  2. Linux进程间通信--信号

    signal 一.初步理解信号 为了理解信号 ,先从我们最熟悉的场景说起: 1.用户输入命令,在Shell下启动一个前台进程. 2.用户按下Ctrl-C,这个键盘输入产生一个硬件中断. 3.如果CPU ...

  3. python进程间通信--信号Signal

    信号signal 是python进程间通信多种机制中的其中一种机制.可以对操作系统进程的控制,当进程中发生某种原因而中断时,可以异步处理这个异常. 信号通过注册的方式'挂'在一个进程中,并且不会阻塞该 ...

  4. Linux环境进程间通信---信号(下)

    一.信号生命周期 从信号发送到信号处理函数的执行完毕 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生:信号在进程 ...

  5. 进程间通信————信号

      信号 信号是在软件层次上对中断机制的一直模拟,是一种异步通信方式 linux内核通过信号通知用户进程, 不同的信号类型代表不同的事件 进程对信号有不同的响应方式 缺省方式 忽略信号 捕捉信号 SI ...

  6. Linux进程间通信(管道、消息队列、共享内存、信号、信号量)

    目录 Linux进程间通信概述 1.管道 无名管道(pipe) 有名管道(fifo) 2.消息队列(msg) 消息队列的通信原理 消息队列相关api 消息队列收发数据 键值生成 消息队列移除 3.共享 ...

  7. linux之进程间通信--使用信号

    一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...

  8. linux 进程间广播,Linux系统编程之进程间通信之浅谈信号

    我们接着谈Linux学习过程中一个重要的话题--信号. 一.信号的概念: 信号是一种软件中断,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式. 二.信号的来源: 1.硬件方式: 当用户按 ...

  9. 【Linux】一篇文章搞定 进程间通信 之 信号机制

    1. 信号的概念 信号的概念理解: 信号是一个程序中断 信号的种类:使用Kill -l 命令可以查看有多少个信号 [gongruiyang@localhost TestSignal]$ kill -l ...

最新文章

  1. 电子火折子的原理,了解一下?
  2. centos 7 yum安装mysql完整过程记录
  3. 客户端用mstsc不能用一台设备连接终端服务器的解决办法
  4. java中数组的返回值是什么类型_面试必问:Java中String类型为什么设计成不可变的?...
  5. Luogu2467 SDOI2010 地精部落 DP
  6. ES6 变量解构赋值
  7. 动态连接_二维动画动态连接基础
  8. 算法 判断多个点是否在同一圆周线上_广州灵活计费自动出盘机技术方案大盘点...
  9. 课后答案︻︼─一大收集
  10. and or not 优先级_EXCEL函数与公式剖析:AND
  11. oracle中的或者是什么,oracle中=是什么意思呢?
  12. workman 搭建tcp服务器,和websocket互相通信
  13. android开发面试题!360°深入了解Flutter,面试总结
  14. 对于“高德地图”的使用感受
  15. Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端
  16. windows系统mysql安装教程<手把手教学>
  17. 一度智信:拼多多平台开网店怎么收费?
  18. 让自己学会有效管理时间
  19. NLP点滴——文本相似度
  20. Android 仿直播特效点赞飘爱心

热门文章

  1. ios c语言编译环境搭建,iOS开发之runtime(一):runtime调试环境搭建
  2. ftp无法与服务器建立连接_建立与Oracle数据库服务器连接的两种连接模式
  3. bitmap画文字 居中_画非画展览馆 观赏石 第八期拍卖
  4. 工业镜头选型计算公式_工业冷水机组制冷量的计算公式是什么?
  5. java数据分析平台源码_DataGear数据可视化分析平台 v2.0.0
  6. vue2.0项目中使用Ueditor富文本编辑器应用中出现的问题
  7. 深入剖析C++多态、VPTR指针、虚函数表
  8. VC里的#define new DEBUG_NEW
  9. 前台如何解析json格式 以及后台如何生成json格式
  10. 几个 ASP.NET 小技巧