第15课-信号通讯编程

15.1 核心理论

1. 信号

在古老的战场上,信号是最有效,最直接的通讯方式;在linux系统中,信号(signal)同样也是最古老的进程间通讯机制。

2. 信号处理流程

进程A/内核---(1)选择信号-----(2)发送信号-----(3)处理信号----进程B。

3. 信号类型

Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有:

SIGKILL:杀死进程

SIGSTOP:暂停进程

SIGCHLD:子进程停止或结束时用来通知父进程

15.2 函数学习

1. 发送信号
(1)函数名

kill

(2)函数原形

int kill(pid_t pid,int sig);

(3)函数功能

向一个进程发送信号(send signal to a process)。

(4)所属头文件

#include<sys/types.h>

#include<signal.h>

(5)返回值

成功:0

失败:-1

(6)参数说明

pid:pid>0,pid参数指向接收信号的进程

sig:指明要发送的信号。

2. 处理信号
(1)函数名

signal

(2)函数原形

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

(3)函数功能

设置信号的处理方式(sets the disposition of the signal signum to handler)。

(4)所属头文件

#include<signal.h>

(5)返回值

成功:返回处理函数指针

失败:SIG_ERR

(6)参数说明

signum:要处理的信号

handler:函数指针,设置对应信号的处理方式。有三种取值:(1)SIG_IGN忽略这个信号不处理,(2)SIG_DFL交给系统去处理,(3)用户自定义的函数:交给用户自定义的函数来处理。

15.3 综合实例编程

A、B进程利用信号通讯。这里我们要一个新的函数pause,下面首先对它进行一个简单的介绍。

(1)函数名

pause

(2)函数原型

int pause(void);

(3)函数头文件

#include<unistd.h>

(4)函数功能

等待信号(wait for signal)

(5)返回值

成功:捕捉了信号返回-1

失败:EINTR

(6)参数

范例:

B进程,接收信号

#include<signal.h>

#include<unistd.h>

void myfuc(int a)

{

printf("Process B received SIGINT!\n");

}

void main()

{

signal(SIGINT,myfuc);

pause();

}

当我们运行这段程序的时候,看到终端处于等待的状态。

我们先使用命令的方式,测试接收程序的实现。打开另一个终端首先输入:ps aux命令查看我们运行的改程序的进程,将序列号记住。然后输入命令:kill -n SIGINT 3637

我们会看到操作的起一个终端开始打印:Process B received SIGINT!

A进程,发出信号:

#include<signal.h>

#include<sys/types.h>

#include<stdio.h>

void main(int argc,char *argv[])  /*因为要把进程B的进程号传过来,我们要设置参数*/

{                                   /*argc表示信号个数,argv[]表示信号*/

pid_t pid;

pid = atoi(argv[1]);           /*argv[0]是程序的名字,argv[1]是B进程的进程号*/

kill(pid,SIGINT);

}

注:pid的获取由命令行来获取,命令行传进来的是一个字符串,pid是个整数,用atoi函数将字符串转换成整数。

运行结果:先运行B进程,然后ps aux查看B进程的进程号(如3710),运行./ap 3710,在等待状态的B进程打印:Process B received SIGINT!

转载于:https://www.cnblogs.com/free-1122/p/11351127.html

第三季-第15课-信号通讯编程相关推荐

  1. 信号通讯编程,王明学learn

    信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...

  2. 《实用VC编程之玩转控件》第15课:Tree树形控件

    本文转载自:VC驿站 https://www.cctry.com/thread-297465-1-1.html 1.控件简介: Tree树形控件也是我们编程过程中比较常用的一个控件,而且在其他软件中也 ...

  3. AI一分钟 | 教育部公布高中新课标,编程、算法思维成必修内容;李彦宏否认百度会“All in AI”

    一分钟AI 李彦宏表示自己做事一向留有余地,否认百度会"All in AI". 教育部发布最新高中课程改革方案,对学生在编程.算法.人工智能和开源硬件方面的要求大幅度提升. 罗永浩 ...

  4. Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2

    吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...

  5. pwm控制舵机转动角度程序_Mixly 第15课 舵机的使用

    第15课  舵机的使用 舵机的旋转不像普通电机那样只是转圈圈,它可以根据你的指令旋转到0至180度之间的任意角度然后精准的停下来.舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的. ...

  6. 13.无名管道通讯编程

    13.无名管道通讯编程 1.进程间的通信: Linux作为典型的多进程操作系统,进程与进程之间肯定需要信息交流,这就需要进程通信. 2.进程通信的目的: 1.数据传输:一个进程需要将数据发送给另一个进 ...

  7. C语言探索之旅 | 第二部分第一课:模块化编程

    C语言之父 Dennis Ritchie -- 简书作者 谢恩铭 转载请注明出处 第二部分第一课:模块化编程 上一课是C语言探索之旅 | 第一部分第十课:练习题+习作,至此,我们[C语言探索之旅]的第 ...

  8. python是什么意思讯_初步理解Python进程的信号通讯

    信号的概念 信号(signal)-- 进程之间通讯的方式,是一种软件中断.一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号. 几个常用信号: SIGINT 终止进程 中断进程 (contro ...

  9. 15个热门的编程趋势及15个逐步走向衰落的编程方向

    Peter Wayner是InfoWorld的一名特约编辑,也是一个多产的作家.除了InfoWorld之外,他还经常为纽约时报和连线杂志撰写文章.近日,Peter撰写了一篇文章,谈到了未来15个热门的 ...

  10. 计算机病毒小学教师资格证面试,小学信息技术人教版四年级上册第15课《病毒防治及时做》优质课公开课教案教师资格证面试试讲教案...

    小学信息技术人教版四年级上册第15课<病毒防治及时做>优质课公开课教案教师资格证面试试讲教案 1教学目标 1.计算机病毒的定义及特征; 2.计算机病毒造成的危害,树立对计算机病毒的防范意识 ...

最新文章

  1. 在Python上使用OpenCV检测和跟踪行人
  2. 数论 - 简单数位推理 --- NYIST 514
  3. 一次Oracle数据迁移
  4. mysql 创建定时器
  5. Windows 平台编译 WebRTC
  6. 显示控制器注释_欧姆龙可编程控制器CS1D-CPU产品型号说明及功能介绍
  7. mysql bcp数据文件_BCP 数据的导入和导出
  8. mysql 树形结构_Mysql安装:基础入门知识
  9. Pragma Directives
  10. XAMPP运行MySQL entire log window on the forums解决方案
  11. pvt检查是什么意思_专业术语EVT、DVT、PVT、MP是什么意思?
  12. 俞优静的“航海”人生-搜狐财经
  13. 等级测评——定级、等级划分及测评时间
  14. Vue 2.0/3.0
  15. 11月21至28号总结
  16. 华中农业大学c语言程序设计在线作业答案,线性代数历年考试卷资料(华南理工大学)华中农业大学试卷 答案.pdf...
  17. [渝粤教育] 四川农业大学 计算机网络 参考 资料
  18. DirectX11学习笔记十 imGUI入坑
  19. 深田之星备件仓库管理系统2011
  20. 模电电路(部分合集)

热门文章

  1. kubernetes集群搭建(二进制方式)
  2. ImageLoader的简单分析(终结篇)
  3. 主机甲采用停等协议向主机乙_TCP/IP 协议——详解篇
  4. 性能测试--jmeter如何发送post请求【4】
  5. selenium启动火狐浏览器_selenium之nodejs入门使用
  6. java final 变量 大小写_java – 为什么“final static int”可以用作开关的大小写常量但不是“final static”...
  7. opencv 梯度幅值_OpenCV学习:图像边缘检测
  8. redis jar包_「建议收藏」手把手教你从零搭建一个redis服务
  9. dataframe两个表合并_使用Pandas关联Excel表操作示例
  10. Html图片懒加载动画,带加载进度的Web图片懒加载组件Lazyload