信号:

信号是通知发生了某种事件的机制,内核和进程都可能会向进程发送各种信
号,进程也可以向自己发送信号。系统定义了一组标准信号类型,每种信号都拥
有唯一的数值和用途。
典型的信号递送是异步的,意味着进程可能会在任何时候被信号中断。在某
些情况下(如硬件产生的信号),信号也可能会被同步递送,意味着信号递送是
可预测的,并且可以在程序执行期间特定时间点重新产生。
信号的默认动作可能是忽略、终止进程(生成或不生成 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. CTF之WEB学习路线规划

    前言 受大佬Lzer0Kx(公众号:LK安全)启发,打算整一篇关于CTF-web的学习路线的分享.当然也算是给一些刚入门的小白的一些学习方向,不至于不知道学啥.废话少说,开整! 以下的所有内容属于我个 ...

  2. redis未授权访问漏洞——简单记录

    从0复现redis未授权访问漏洞 环境:centos8(ip:10.0.0.3) 安装 redis 工具:kali(10.1.1.136) 1. 介绍 Redis REmote DIctionary ...

  3. CF1418D Trash Problem

    题目传送门 思路 这题其实非常的简单,完全到不了 \(\mathcal *2100\). 发现这个题目描述有点诈骗,但是翻译的挺不错,实质上问题就是给你 \(n\) 个点,让你动态维护相邻两个点的差值 ...

  4. sql 查找连续的时间区间以及连续天数

    create table tmptable(rq datetime) go insert tmptable values('2010.1.1') insert tmptable values('201 ...

  5. 如何将 Autofac 整合进 Net6.0 Core MVC 项目中

    一.前言 1.前言 Asp.Net Core Mvc,我也用了很长一段时间了,它现在的编程模型和方式还是特别棒的,都是组件开发,什么都可以替换,当然了,您别抬杠,有些还是不能替换的.自从我们进入了跨平 ...

  6. Android:Activity

    什么是 Activity 简单来说 Activity 类似于一个 Web 的页面,表示拥有整个屏幕的界面.电子邮件应用可能有一个显示新电子邮件列表的 Activity.一个用于撰写电子邮件的 Acti ...

  7. Xilinx XPM使用说明--XPM_MEMORY_SDPRAM

    XPM_MEMORY_SDPRAM 参数化宏:简单的双端口RAM 介绍 此宏用于实例化简单双端口RAM.端口A用于从存储器执行写入操作,端口B可用于从存储器读取. 下面介绍XPM_MEMORY实例的基 ...

  8. Java学习笔记(一)环境安装与java基础

    学习笔记01 两年前学的Java,现在已经忘得差不多了,跟着狂神说Java的视频从头开始学,希望能救一救ww 一.JDK JRE JVM 1. JDK java development kit 2. ...

  9. CF1738E Balance Addicts

    个人思路: \(sum_i\) 表示前 \(i\) 个数的前缀和,推一下式子可知是要选若干对 \(l_i,r_i\),使得 \(l_1 < l_2 <\dots < l_k \le ...

  10. 加载properties文件

    import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...