linux进程的软中断通信del,linux进程的软中断通信
linux进程的软中断通信
要求
实现软中断通信的程序
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按delete键),当父进程接收到这两个软中断的某一个后,父进程用系统调用kill()向两个子进程分别发出整数值为16和17软中断信号,子进程获得对应软中断信号,然后分别输出下列信息后终止:
Child process 1 is killed by parent !!
Child process 2 is killed by parent !!
父进程调用wait()函数等待两个子进程终止后,输入以下信息,结束进程执行:
Parent process is killed!!
多运行几次编写的程序,简略分析出现不同结果的原因。
相关函数
signal函数
signal(sig,function): 捕捉中断信号sig后执行function规定的操作。
头文件为:#include
参数定义:signal(sig,function)
int sig;
void (*func) ();
其中sig共有19个值
这里用到了3号,即相应键盘的停止信号,ctr+(也可能是ctrl + c),和16,17号自定义信号
wait()函数
父进程处于阻塞状态,等待子进程终止,其返回值为所等待子进程的进程号
exit()函数
进程自我终止,释放所占资源,通知父进程可以删除自己,此时它的状态变为P_state= SZOMB,即僵死状态.如果调用进程在执行exit时其父进程正在等待它的中止,则父进程可立即得到该子进程的ID号
流程图
实现
#include
#include
#include
#include
#include
#include
int flag_wait=1;
void stop2()
{
flag_wait=0;
printf("
son interruption
");
}
void stop()
{
printf("
interruption
");
}
int main()
{
pid_t pid1,pid2;
signal(3,stop);
while((pid1=fork())==-1);
if(pid1>0)
{
while((pid2=fork())==-1);
if(pid2>0)
{
sleep(5);
kill(pid1,16);
wait(0);
kill(pid2,17);
wait(0);
printf("
Parent process is killed
");
exit(0);
}
else
{
signal(17,stop2);
while(flag_wait);
printf("
child process 2 is killed
");
exit(0);
}
}
else
{
signal(16,stop2);
while(flag_wait);
printf("
child process 1 is killed
");
exit(0);
}
return 0;
}
结果
运行后若按下停止键,则
或者5秒后自动执行
linux进程的软中断通信del,linux进程的软中断通信相关推荐
- Linux内核态之间进程通信,内核态和用户态通信(二)--实现
本文主要使用netlink套接字实现中断环境与用户态进程通信. 系统环境:基于linux 2.6.32.27 和 linux 3.16.36 Linux内核态和用户态进程通信方法的提出和实现 用户上下 ...
- (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)
文章目录 一:什么是进程通信 二:如何实现进程间通信及其分类 三:通信方式1-共享存储(共享内存) (1)课本基础内容 (2)补充-Linux中的进程通信 四:通信方式2-管道 (1)管道是什么 (2 ...
- linux进程管道通信缺点,Linux进程通信(IPC)的方式详解
前言:Linux进程通信的方式 什么是进程通信?进程通信是指进程之间交换信息 进程通信方式共有6种: 管道(pipe),包括流管道(s_pipe)和有名管道(named pipe) 信号(signal ...
- linux 跨进程读取内存,Android之Linux跨进程通信的方式
As we all know,Android是基于Linux内核开发的,而市面上几乎所有的App都离开跨进程通信.可能你会说Android是通过Binder完成进程之间的通信的.但是Binder是怎么 ...
- linux 进程通信机制,LINUX内核进程高效通信机制研究
摘要:进程间的通信是多任务.多用户操作系统必须考虑的重大问题,Linux继承了Unix的基本设计思想,其安全性和稳定性得到了人们的认可,但随着其应用领域的不断拓展,其通信机制已经不能满足用户的需求.本 ...
- Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来,Linux ...
- linux 同一进程内通信,linux中,管道能够在同一进程中进行通信吗?
linux中,管道能够在同一进程中进行通信吗? 答案是否定的. 管道是用于不同进程之间通信,不能再同一进程中进行通信. 同一进程中,直接进行参数传递就行了,不设计通信问题. 不同进程之间才需要通信,通 ...
- linux 创建精灵进程,linux 进程通信之 守护进程
守护进程(Daemon) Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间.一般采用以d结尾的名字.从下面的进程信息可以看出, ...
- linux c之通过管道实现兄弟间进程通信:
1.兄弟间进程通信: 父进程创建管道,并使用fork函数创建2个进程,在第一个子进程发消息到第二个子进程,第2个子进程读取消息并处理,在父进程中不使用管道通信,所以什么都不做,直接关闭管道两端并退出 ...
最新文章
- GPS实验三:GPS接收机野外数据采集
- Java 代码复用 —— 泛型
- Codeforces Round #445 div.2 D. Restoration of string 乱搞
- unsigned char与char的区别
- 【Vue学习】—Vue UI组件库(二十八)
- pycharm 安装PYQ5以及no Qt platform plugin could be initialized的问题
- Python Tricks(十一)—— 阶乘的实现
- Linux7.2虚拟机连接电脑相关配置
- 利用遗传算法求解旅行商问题
- 推荐一个宝藏公众号,附大数据PPT合集下载
- 计量经济学——试题总结
- 联想ghost重装系统_联想笔记本系统重装图文教程
- MariaDB的延迟开源模式及其BSL许可证介绍(一)
- 如何解密pdf加密文件
- 《C语言程序设计》第4版 何钦铭、颜晖主编 课后习题答案 第12章 课后习题
- js中 0 +0 -0 有什么区别?
- 计算机思维与应用论文,计算机的思维与计算机应用关系分析
- SQLServer的sql_variant数据类型
- aleo测试网部署教程
- html个人博客网站模板(源码)