各位看官们,大家好,上一回中咱们说的是进程间通信的样例。这一回咱们说的样例是:使用信号进行进程间通信。闲话休提,言归正转。

让我们一起talk C栗子吧!

我们在上一回中提到过进程之间通信须要解决的三个问题,时间不长。我想大家都记得。今天我们就来解决第一个问题:进程之间怎样进行通信

信号的概念

在解决这个问题前。我们先介绍一下信号。信号是Unix/Linux系统提供的一种机制,它本质上一种软件中断

信号为我们提供了一种异步的事件处理方法。当进程收到信号时就会採取某种操作。比如,当进程收到终止信号(SIGKILL)时就会终止进程。这点我们在介绍进程结束时做过相关的说明。

系统为信号定义了名字,我们能够通过名字来使用信号,信号名字是以SIG开头的字符串。比方。SIGKILL,SIGINT等。

信号的产生

要使用信号进行进程间的通信,首先须要产生信号,信号能够通过以下几种方式来产生:

  • 1.用户使用终端按键时发出信号。

    比方按下ctrl+c会发出中断信号:SIGINT;

  • 2.硬件有异常时会发出信号。比方使用无效的内存;
  • 3.软件符合某种条件时会发出信号。比方闹钟时钟超时后会发出SIGALRM信号。
  • 4.使用kill命令主动发送信号;

信号的处理

进程收到信号后会做对应的处理,详细有以下几种处理方式:

  • 1.忽略信号。该处理方式就是收到信号后什么也不做,自己总在歇息;
  • 2.执行系统对信号定义的默认动作。

    该处理方式就是收到信号后把它交给系统去处理,自己在一边歇息;

  • 3.捕捉信号。这样的处理方式就是收到信号后做一些相关的处理,至于做什么处理,须要用户去实现。

明确信号的这些知识后,我们就正式開始介绍使用信号这样的方式进行通信。

我们举一个简单的样例进行说明。

编译以下的程序而且执行:

int main
{
int i = 0;
while(i++ < 9999)
{
printf("i have been sleeping for %d second \n",i);
sleep(1);
} return 0;
}

以下是程序的执行结果。请大家參考:

./s                                  //在终端中执行编译后的程序
i have been sleeping for 1 second //程序在执行,而且输出执行结果
i have been sleeping for 2 second
i have been sleeping for 3 second
i have been sleeping for 4 second
i have been sleeping for 5 second
i have been sleeping for 6 second
i have been sleeping for 7 second
i have been sleeping for 8 second
i have been sleeping for 9 second
i have been sleeping for 10 second
^C //在终端中按下ctrl+c终止程序执行

通过上面的程序, 我们分析一下程序中进程通信的原理

  • 把在终端中执行的程序当作进行A,终端本身当作进程B。
  • 在进行B中通过按键给进程 A发送SIGINT信号。
  • 进程B收到该信号后做出了响应:停止执行。我们在进程B中能够看到进程A停止了执行。

看官们。我们后面的章回中还会举其他进程之间通信的样例,以便让大家对使用信号进行进程之间通信有更加深入的了解。

各位看官。关于使用信号进行进程间通信的样例咱们就讲到这里。欲知后面还有什么样例,且听下回分解 。


一起talk C栗子吧(第八十四回:C语言实例--使用信号进行进程间通信一)的更多相关文章

  1. 一起talk C栗子吧(第八十五回:C语言实例--使用信号进行进程间通信二)

    各位看官们,大家好,上一回中咱们说的是使用信号进行进程间通信的样例,这一回咱们接着上一回的内容,继续说该样例.闲话休提.言归正转. 让我们一起talk C栗子吧. 我们在上一回中举了使用信号进行进程间 ...

  2. 一起talk C栗子吧(第十二回:C语言实例--单链表一)

    各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子.也就是C语言实例.闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们,上一回中咱们没有说详细的样例,并且是说了样例中的文 ...

  3. 一起talk C栗子吧(第二十二回:C语言实例--队列一)

    各位看官们,大家好,上一回中咱们说的是表达式求值的样例,该样例使用了栈,这一回咱们说的是栈的 兄弟:队列. 闲话休提,言归正转.让我们一起talk C栗子吧. 我们在这里说的队列是一种抽象的数据结构, ...

  4. 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册

    第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...

  5. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. 孤荷凌寒自学python第八十四天搭建jTessBoxEditor来训练tesseract模块

    孤荷凌寒自学python第八十四天搭建jTessBoxEditor来训练tesseract模块 (完整学习过程屏幕记录视频地址在文末) 由于本身tesseract模块针对普通的验证码图片的识别率并不高 ...

  7. 《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程)

    1.简介 TestNG还为我们提供了测试的记录功能-日志.例如,在运行测试用例期间,用户希望在控制台中记录一些信息.信息可以是任何细节取决于目的.牢记我们正在使用Selenium进行测试,我们需要有助 ...

  8. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

  9. 一起talk C栗子吧(第八十七回:C语言实例--使用管道进行进程间通信概述)

    各位看官们,大家好.上一回中咱们说的是进程间通信的样例.这一回咱们说的样例是:使用管道进行进程间通信. 闲话休提,言归正转. 让我们一起talk C栗子吧! 我们在前面的的章回中介绍了使用管道进行进程 ...

随机推荐

  1. Selenium WebDriver- 使用显示等待,判断搜狗的输入框是否显示,按钮是否可点击,然后在输入光荣之路搜索词,然后在点击搜索。

    #encoding=utf-8 from selenium import webdriver import time from selenium.webdriver.common.by import ...

  2. 大数据学习——spark安装

    一主多从 1 上传压缩包 2 解压 -bin-hadoop2..tgz 删除安装包 -bin-hadoop2..tgz 重命名 mv spark-1.6.2-bin-hadoop2.6/ spark  ...

  3. Numpy ndarray 的高级索引存在 "bug" ?

    Numpy ndarray 高级索引 "bug" ? 话说一天,搞事情,代码如下 import numpy as np tmp = [1, 2, 3, 4] * 2 a, b = ...

  4. ibatis 动态SQL

    直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,I ...

  5. 《人月神话》读书笔记(2)-week3

    为了确保团队中的每个人都能保持系统概念上的完整性,关于项目的书面规格说明是必不可少的.手册要描绘用户可见的一切,但不应支配实现的过程.光有规格说明也是不够的,会议也是必要的.书中提到的周例会会迅捷地给 ...

  6. DS-博客作业06--图

    DS-博客作业06--图 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对图结构的认识及学习体会. 本章的图,因为和上一章的树上的比较紧凑,所以在考前一个星期也有看书背代码,也有理解代码和思 ...

  7. 九度oj 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他.问题是:求出1~13的整数中1出现的次数,并算出100~130 ...

  8. UVa——400Unix ls(字典序文本处理输出iomanip)

    Unix ls Time Limit:                                                        3000MS                    ...

  9. [CODEVS1915] 分配问题(最小费用最大流)

    传送门 脑残题 建图都懒得说了 ——代码 #include <queue> #include <cstdio> #include <cstring> #includ ...

  10. 【CF696B】Puzzles(树形DP,期望)

    题意:n 个节点的树,初始位置为 1 号节点,初始时间为 1.每次随机地走向任何一个没有走过的子树并且令时间 +1求问走到每一个点时的时间的期望值 思路:比较少见的一道自顶向下的树形DP dp[i]表 ...