Linux进程间通讯方法及装置、进程退出监听方法制造方法及图纸

技术编号:14348269 阅读:84 留言:0更新日期:2017-01-04 18:57
本发明专利技术公开了一种Linux进程间通讯方法,包括步骤:S11:核心进程轮询消息队列中的消息;S12:核心进程解析所述消息并判断所述消息是否为注册事件的事件信息;S13:当判断所述消息为注册事件的事件信息时,根据所述事件信息查找事件管理链表,获得所有监听该注册事件的进程号;S14:核心进程根据所述进程号唤醒所有监听该注册事件的进程,并根据事件处理函数链表调用每个进程中该注册事件对应的事件处理函数。本发明专利技术通过采用event广播机制实现了Linux系统进程间轻量级通讯,增强了系统的稳定性,同时节省了系统的资源。

【技术实现步骤摘要】

本专利技术涉及Linux平台
,尤其涉及Linux进程间通讯方法及装置、进程退出监听方法
技术介绍
Linux是一种自由和开放源码的类Unix操作系统,可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。Linux系统是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。现有的Linux下进程通讯的集中主要手段简介:管道(pipe)及有名管道(namedpipe):管道可用于具有亲缘关系进程之间的通讯,有名管克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列systemV消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和SystemV的变种都支持套接字。上述现有进程通讯手段中管道需要名字、亲缘关系,且只能承载无格式字节流以及缓冲区大小受限,而信号具有承载信息量小、不可靠的限制等缺点,共享内存需要考虑进程间的同步及互斥,增加了设计的复杂度的限制。
技术实现思路
为解决上述技术问题,本专利技术提供一种Linux进程间通讯方法及装置、进程退出监听方法,能够实现简单轻量级的进程间通讯及进程退出监听。本专利技术提供的技术方案如下:本专利技术公开了一种Linux进程间通讯方法,包括步骤:S11:核心进程轮询消息队列中的消息;S12:核心进程解析所述消息并判断所述消息是否为注册事件的事件信息;S13:当判断所述消息为注册事件的事件信息时,根据所述事件信息查找事件管理链表,获得所有监听该注册事件的进程号;S14:核心进程根据所述进程号唤醒所有监听该注册事件的进程,并根据事件处理函数链表调用每个进程中该注册事件对应的事件处理函数。本专利技术通过消息队列及链表来实现Linux事件的监听,从而实现进程之间的轻量级的通讯,Linux系统上层的应用程序只需要注册需要监听的事件以及注册事件的事件处理函数,当相关的事件发生时就会调用注册事件的事件处理函数来实现进程的通讯。本专利技术通过采用event广播机制实现了Linux系统进程间轻量级通讯,增强了系统的稳定性,同时节省了系统的资源。进一步优选的,所述步骤S1之前还包括步骤:S01:为每个进程建立所述事件处理函数链表;所述事件处理函数链表包括所述注册事件的事件名及对应的所述事件处理函数;S02:核心进程建立事件管理链表;所述事件管理链表包括每个注册事件的事件名及所有监听该注册事件的进程号。进一步优选的,所述步骤S12“判断所述消息是否为注册事件的事件信息”具体包括步骤:S121:判断所述消息的类型是否为event类型;若是,执行步骤S13;否则不作处理。进一步优选的,所述步骤S13“根据所述事件信息查找事件管理链表,获得所有监听该注册事件的进程号”具体包括:S131:根据所述事件信息中的事件名查找所述事件管理链表中与所述事件名对应的进程号,获得所有监听所述事件名对应的注册事件的进程号。本专利技术还公开了一种进程退出监听方法,使用上述Linux进程间通讯方法监听进程退出消息,包括步骤:S21:当有进程退出时,系统执行内核的do_exit函数;S22:所述do_exit函数调用预设的自定义函数;S23:预设进程根据所述自定义函数获取退出进程的进程信息,并封装所述进程信息生成进程退出事件信息上传至核心进程的消息队列;S24:核心进程读取并解析所述消息队列中的所述进程退出事件信息,并根据所述进程退出事件信息获得监听该进程退出事件的进程号;S25:核心进程根据所述进程号唤醒所有监听该进程退出事件的进程,并根据事件处理函数链表调用每个进程中该进程退出事件对应的事件处理函数。本专利技术通过Hook技术实现系统所有进程退出的监听,通过将汇编的指令码,跳转地址转换为机器码,将系统中原本的调用函数替换为自定义函数来实现监听。本专利技术提供的轻量级的进程退出监听方法使用简便,相比其他的进程通讯增强了系统的稳定性,节省了系统的资源。进一步优选的,所述步骤S21之前还包括步骤:S20:在核心进程的所述事件管理链表中建立进程退出事件的事件名及所有监听该注册事件的进程号,注册进程退出事件;同时,在监听所述进程退出事件的所有进程中建立注册所述进程退出事件对应的事件处理函数。进一步优选的,所述进程信息包括退出进程的进程号及名称;所述步骤S23“封装所述进程信息,生成进程退出事件信息”具体包括:S231:将所述退出进程的进程号、名称与该退出进程对应的退出进程事件的事件名封装生成进程退出事件信息。进一步优选的,所述步骤S24“核心进程读取并解析所述消息队列中所述进程退出事件信息”具体包括步骤:S241:核心进程读取所述消息队列中event类型的消息,解析所述event类型的消息获得进程退出事件信息。进一步优选的,所述步骤S24“根据所述进程退出事件信息获得监听该进程退出事件的进程号”具体包括步骤:S242:根据所述进程退出事件信息获得进程退出事件的事件名;根据所述进程退出事件的事件名查找所述事件管理链表中与所述事件名对应的进程号,获得监听该进程退出事件的进程号。进一步优选的,所述步骤S21和步骤S22之间还包括步骤:S215:将内核中的进程退出函数替换为预设的自定义函数。本专利技术还公开一种Linux进程间通讯装置,使用上述Linux进程间通讯方法,包括:轮询模块,用于轮询消息队列中的消息;解析模块,用于解析消息队列中的所述消息;判断模块,用于判断所述消息是否为注册事件的事件信息;查找模块,用于当判断所述消息为注册事件的事件信息时根据所述事件信息查找事件管理链表,获得所有监听该注册事件的进程号;执行模块,用于根据所述进程号唤醒所有监听该注册事件的进程,并根据事件处理函数链表调用每个进程中该注册事件对应的事件处理函数。本专利技术提供了一种轻量级的进程间通讯方法及装置实现了event广播机制及进程退出监听,与现有技术相比,克服了现有进程间通讯方法的缺点。本专利技术给上层应用的使用提供了简单的接口,所有功能的实现都由even本文档来自技高网
...
Linux进程间通讯方法及装置、进程退出监听方法

【技术保护点】
一种Linux进程间通讯方法,其特征在于,包括步骤:S11:核心进程轮询消息队列中的消息;S12:核心进程解析所述消息并判断所述消息是否为注册事件的事件信息;S13:当判断所述消息为注册事件的事件信息时,根据所述事件信息查找事件管理链表,获得所有监听该注册事件的进程号;S14:核心进程根据所述进程号唤醒所有监听该注册事件的进程,并根据事件处理函数链表调用每个进程中该注册事件对应的事件处理函数。

【技术特征摘要】
1.一种Linux进程间通讯方法,其特征在于,包括步骤:S11:核心进程轮询消息队列中的消息;S12:核心进程解析所述消息并判断所述消息是否为注册事件的事件信息;S13:当判断所述消息为注册事件的事件信息时,根据所述事件信息查找事件管理链表,获得所有监听该注册事件的进程号;S14:核心进程根据所述进程号唤醒所有监听该注册事件的进程,并根据事件处理函数链表调用每个进程中该注册事件对应的事件处理函数。2.如权利要求1所述的Linux进程间通讯方法,其特征在于,所述步骤S1之前还包括步骤:S01:为每个进程建立所述事件处理函数链表;所述事件处理函数链表包括所述注册事件的事件名及对应的所述事件处理函数;S02:核心进程建立事件管理链表;所述事件管理链表包括每个注册事件的事件名及所有监听该注册事件的进程号。3.如权利要求2所述的Linux进程间通讯方法,其特征在于,所述步骤S12中“判断所述消息是否为注册事件的事件信息”具体包括步骤:S121:判断所述消息的类型是否为event类型;若是,执行步骤S13;否则不作处理。4.如权利要求3所述的Linux进程间通讯方法,其特征在于,所述步骤S13中“根据所述事件信息查找事件管理链表,获得所有监听该注册事件的进程号”具体包括:S131:根据所述事件信息中的事件名查找所述事件管理链表中与所述事件名对应的进程号,获得所有监听所述事件名对应的注册事件的进程号。5.一种进程退出监听方法,使用上述1-4项任意一项权利要求所述的Linux进程间通讯方法监听进程退出消息,其特征在于,包括步骤:S21:当有进程退出时,系统执行内核的do_exit函数;S22:所述do_exit函数调用预设的自定义函数;S23:预设进程根据所述自定义函数获取退出进程的进程信息,并封装所述进程信息生成进程退出事件信息上传至核心进程的消息队列;S24:核心进程读取并解析所述消息队列中的所述进程退出事件信息,并根据所述进程退出事件信息获得监听该进程退出事件的进程号;S25:核心进程根据所述进程号唤醒所有监听该进程退出事件的进...

【专利技术属性】
技术研发人员:陈金华皮小军王大岁
申请(专利权)人:上海盈方微电子有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1