信号:

信号是通知发生了某种事件的机制,内核和进程都可能会向进程发送各种信
号,进程也可以向自己发送信号。系统定义了一组标准信号类型,每种信号都拥
有唯一的数值和用途。
典型的信号递送是异步的,意味着进程可能会在任何时候被信号中断。在某
些情况下(如硬件产生的信号),信号也可能会被同步递送,意味着信号递送是
可预测的,并且可以在程序执行期间特定时间点重新产生。
信号的默认动作可能是忽略、终止进程(生成或不生成 core dump 文件)、
停止进程执行、继续执行已停止的进程。不同信号类型的默认动作是不一样的。
此外程序可以使用 signal()或 sigaction()显式地忽略一个信号,或者建立程序员自
定义的信号处理器。由于可移植性等原因,我们最好使用 sigaction()来建立信号
处理器。
进程(拥有适当的权限)可以使用 kill()向其它进程发送信号。发送 null 信号
(0)可以检测特定进程 ID 是否正被系统使用。
每个进程都拥有一个信号掩码,也就是当前阻塞递送的信号集。我们可以使
用 sigprocmask()向信号掩码中添加或删除信号。
如果一个信号在被阻塞时接收到,会保持未决直到该信号被解除阻塞。标准
信号不会被排队,也就是说一个信号只会被标记为未决一次,稍后也只会被递送

一次。进程可以使用 sigpending()系统调用来获取当前未决的信号集。

sigaction()系统调用在设置信号部署(当有信号来时,被调用的函数)时,能够提供比 signal()更多的控制选项

和灵活性。首先我们可以指定一组额外的信号,在信号处理器被调用时进行阻塞。
此外还可以使用许多标志来控制信号处理器被调用时的各种动作。例如有些标志
可以选择使用老式的不可靠信号语义(不阻塞导致信号处理器调用的当前信号,
以及调用信号处理器之前重置信号的部署为默认动作)。
使用 pause()可以暂停进程的执行,直到某个信号到达。

注意:信号处理器是异步的,在多线程情况下,要避免使用不可重入的库函数。

实时信号:

  信号发送的次数,但是因为并发的原因,在内核调用进程的时间间隔内,普通信号的调用次数被记录为一次。

  实时信号会维持一个队列,来记录所有的实时信号,但是这个队列长度是有限制的。

  并且实时信号可以携带少量的数据。通过int数据或者携带一个指针(在信号中不常用)。通过sigqueue()系统调用发送实时信号。

同步信号等待:

  首先要阻塞住需要等待的信号,不然它们会调用相应的信号处理器。通过waitsiginfo()函数可以阻塞进程来等待信号。从而实现进程同步。

定时器:

  用setimer()和alarm()可以定时给进程发送信号,它们共享同一进程的同一实时信号

  可以用来实现定时器的其他函数:sleep(), nanosleep(), POSIX时钟用clocktime来计时

linux下进程通信总结的更多相关文章

  1. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  2. [置顶] 简单解析linux下进程通信方法

    linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间 ...

  3. Linux下进程通信之管道

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...

  4. Linux下进程间管道通信小作业

    在进行这次作业之前,我们先来看看什么是管道吧! 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间, ...

  5. Linux下进程的建立

    Linux下进程的建立 我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使 ...

  6. Linux之进程通信20160720

    好久没更新了,今天主要说一下Linux的进程通信,后续Linux方面的更新应该会变缓,因为最近在看Java和安卓方面的知识,后续会根据学习成果不断分享更新Java和安卓的方面的知识~ Linux进程通 ...

  7. 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)

    在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通 ...

  8. 【Linux】Linux下进程间的通信方式

    本文内容: 1.进程通信的目的 2.介绍Linux下进程间的4种通信方式:管道,消息队列,共享内存,信号量 ps:套接字也可以用于进程间的通信,不过是不同物理机器上的进程通信,本章讨论是是同一台物理机 ...

  9. linux 下进程通讯详解

    linux 下进程通讯方法主要有以下六种: 1.管道 2.信号 3.共享内存 4.消息队列 5.信号量 6.socket

  10. 【Linux下进程机制】从一道面试题谈linux下fork的运行机制

    今天一位朋友去一个不错的外企面试linux开发职位,面试官出了一个如下的题目: 给出如下C程序,在linux下使用gcc编译: #include "stdio.h" #includ ...

随机推荐

  1. Eureka+SpringCloud微服务(入门一)

    项目地址 [CloudStudy项目](zko0/cloudStudy: Springcloud学习工程 (github.com)) 1.依赖版本 cloud:Hoxton.SR1 boot:2.2. ...

  2. 读写wav格式文件

    读写wav格式文件 本文所有相关代码(包括未来的)均可在该代码库找到 https://gitcode.net/PeaZomboss/learnaudios 本文代码在MinGW-w64 gcc/g++ ...

  3. sort()排序以及多个属性数组对象排序(按条件排序)

    原生排序 let arr = [5,2,1,4,9,8] for(let i = 0 ; i < arr.length ; i ++) { for(let j = 0 ; j < arr. ...

  4. 【JavaScript】JS引擎中执行上下文如何顺序执行代码

    首先我们知道JavaScript引擎包括一个调用栈和堆,调用栈是代码实际执行的地方,使用执行上下文(执行环境)来完成:堆是非结构化的内存池,存储了应用程序所需要的所有对象. 执行上下文是什么? 执行上 ...

  5. 病程极短(≤16周)的495例未分化关节炎患者随访2年的结局[EULAR2015_SAT0055]

    病程极短(≤16周)的495例未分化关节炎患者随访2年的结局   SAT0055 TWO-YEAR OUTCOME IN 495 PATIENTS WITH UNDIFFERENTIATED ARTH ...

  6. vue data为什么是函数

    vue data是函数的原因: 1.防止data复用: 2.data独立性: 3.作用域: 4.js的特性. 总结来说,如果data是一个函数的话,这样每复用一次组件,就会返回一份新的data(类似于 ...

  7. 02#Vue3 Transition 过渡:切换路由组件

    复习作用域插槽 组件可以被插入些许节点作为其子节点,插槽<slot>就是一个接口(或桥梁)引导这些节点进入组件.这些节点应该被渲染到组件里的具体哪个位置,就是具名插槽的作用. 就像是给手机 ...

  8. Git多分支 远程仓库 协同开发以及解决冲突

    目录 一.Git多分支及远程仓库 1.Git多分支 2.正常密码链接远程仓库 3.ssh公钥私钥方式链接远程仓库 三.协同开发及解决冲突 1.协同开发 2.解决冲突 四.线上分支合并及远程仓库回滚 1 ...

  9. vue3学习

    资料: http://docs.vikingship.xyz/ 声明类型:      1.使用ref可以声明基础数据 2.使用reactive声明对象数据 3.computed可以返回一个不变的响应式 ...

  10. idea-lombok使用

    一.添加 lombok 插件 file -- setting  -- plugins - 输入 Lombok 搜索,进行安装 二.引入依赖 <dependency> <groupId ...