Linux下信号通信实现A进程死循环输出A后被C进程处理输出C

来源:互联网 发布:淘宝头条写手招募 编辑:程序博客网 时间:2024/06/05 16:02

一.  信号基本概念

信号本质
信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。
信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。
信号来源
信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。

基本概念参考此博客

linux进程通信之信号

二.相关知识

sigacation结构体,已知信号,信号处理函数等。

sigaction

该函数与signal函数一样,用于设置与信号sig关联的动作,而oact如果不是空指针的话,就用它来保存原先对该信号的动作的位置,act则用于设置指定信号的动作。
sigaction结构体定义在signal.h中,但是它至少包括以下成员:
void (*) (int) sa_handler;处理函数指针,相当于signal函数的func参数。
sigset_t sa_mask; 指定一个。信号集,在调用sa_handler所指向的信号处理函数之前,该信号集将被加入到进程的信号屏蔽字中。信号屏蔽字是指当前被阻塞的一组信号,它们不能被当前进程接收到
int sa_flags;信号处理修改器;

三.问题描述

A进程有一个死循环,不停的在终端输出信息“A”。 这个时候,另外一个进程C被创建,尝试将A进程输出的“A”字符修改成“C”

四.代码实现


五.运行结果


PS:菜鸟一只,欢迎相互学习探讨交流。不足之处还请指出。