CN112181670A - 进程间通讯方法及装置和Linux设备 - Google Patents
进程间通讯方法及装置和Linux设备 Download PDFInfo
- Publication number
- CN112181670A CN112181670A CN201910587610.9A CN201910587610A CN112181670A CN 112181670 A CN112181670 A CN 112181670A CN 201910587610 A CN201910587610 A CN 201910587610A CN 112181670 A CN112181670 A CN 112181670A
- Authority
- CN
- China
- Prior art keywords
- session
- target
- data
- socket
- session object
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例公开一种多进程间通讯方法及装置和采用所述进程间通讯方法的Linux设备。所述多进程间通讯方法例如包括:目标进程启动后获取进程ID;基于获取的所述进程ID创建套接字,并使所述套接字与目标配置文件绑定;解析所述目标配置文件以得到所述目标配置文件包含的会话对象进程的进程ID,并创建与所述会话对象进程的所述进程ID相对应的会话结构体;以及当需要向所述会话对象进程发送数据时,在所述会话结构体中的所述套接字描述符内写入目标数据包,或当监听到所述会话对象进程向所述目标进程发送数据时,从所述会话结构体中的所述套接字描述符内读取数据包。本发明实施例可以实现嵌入式系统中多个应用程序间的高效通讯。
Description
技术领域
本发明涉及嵌入式设备技术领域,尤其涉及一种进程间通讯方法、一种进程间通讯装置以及一种Linux设备。
背景技术
随着技术的不断进步,以及Linux系统的开源性,Linux设备具有越来越广的应用性。在Linux设备中,不同的应用进程之间有不同分工,通过在进程之间通讯实现数据传递,即在进程之间传播或交换信息。如果进程之间不能实现良好的通讯,则会影响进程的进度,并影响Linux设备的运行效率。
发明内容
为克服现有技术的缺陷和不足,本发明的实施例提供一种Linux设备以及一种Linux设备中多个进程之间的通讯方法。
一方面,本发明实施例提出一种进程间通讯方法,适用于Linux设备且包括步骤:目标进程启动后获取进程ID;所述目标进程基于获取的所述进程ID创建套接字,并使所述套接字与目标配置文件绑定;所述目标进程解析所述目标配置文件以得到所述目标配置文件包含的会话对象进程的进程ID,并创建与所述会话对象进程的所述进程ID相对应的会话结构体,其中所述会话结构体包括所述会话对象进程的所述进程ID、以及关联所述目标进程的所述套接字与所述会话对象进程的套接字之套接字描述符;以及当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包,或当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包。
本实施例通过在进程启动时获取进程ID、且基于获取的进程ID创建套接字并绑定包含会话对象进程的进程ID的配置文件,从而明确了各进程的通讯对象,可以避免其它无关进程的干扰,以及各进程使用本地套接字的方式进行相互通讯,方便对所有关联进程进行统一化管理。
在一个实施例中,所述目标数据包包括控制头和数据段,所述控制头描述会话事件信息,所述数据段包括数据头和数据区,所述数据头描述数据包信息,所述数据区的大小为预定字节。
在一个实施例中,,当所述目标进程需要向所述会话对象进程发送的数据大于所述预定字节时,将所述发送的数据存储在共享内存中,并在所述目标数据包中写入共享内存ID。
在一个实施例中,所述共享内存ID位于所述目标数据包的所述数据头中。
在一个实施例中,所述数据区包括头部、标签及尾部,所述头部描述标签个数和数据大小,所述标签表示事件,所述尾部放置事件相关信息。
在一个实施例中,所述配置文件包含所述会话对象进程的所述进程ID、进程类型和读写权限,且位于所述配置文件的表头。
在一个实施例中,所述目标配置文件包含多个会话对象进程的进程ID,相应地创建与每一个所述会话对象进程的所述进程ID相对应的会话结构体以形成会话链表,其中创建的每一个所述会话结构体作为所述会话链表中的一个会话结构体节点。
在一个实施例中,所述当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包具体包括:所述目标进程获取所述会话对象进程的所述进程ID,根据获取的所述会话对象进程的所述进程ID查找所述会话链表中的会话结构体节点,确定查找到的所述会话结构体节点的套接字描述符,以及向确定的所述套接字描述符内写入目标数据包;所述当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包具体包括:所述目标进程监听所述会话链表中的会话结构体节点,当有事件触发时从所述会话链表中查找触发所述事件的会话结构体节点,确定查到的所述会话结构体节点中的套接字描述符,以及从确定的所述套接字描述符内读取数据包。
在一个实施例中,所述配置文件包含所述会话对象进程的所述进程ID、进程类型信息和读写权限信息。
另一方面,本发明实施例提供的一种进程间通讯装置,适用于Linux设备且可以执行前述任一实施例所述的进程间通讯装置,其例如包括:ID获取模块,用于供目标进程启动后获取进程ID;创建及绑定模块,用于供所述目标进程基于获取的所述进程ID创建套接字,并使所述套接字与目标配置文件绑定;解析及创建模块,用于供所述目标进程解析所述目标配置文件以得到所述目标配置文件包含的会话对象进程的进程ID,并创建与所述会话对象进程的所述进程ID相对应的会话结构体,其中所述会话结构体包括所述会话对象进程的所述进程ID、以及关联所述目标进程的所述套接字与所述会话对象进程的套接字之套接字描述符;以及数据收发模块,用于当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包,或当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包。
再一方面,本发明实施例提出的一种Linux设备,包括:处理器和存储器;其中所述存储器存储有所述处理器执行的指令,且所述指令使得所述处理器执行操作以进行如上所述任意一种进程间通讯方法。
本发明实施例提供的进程间通讯方法及装置和Linux设备可以具有以下一个或多个技术效果:1)通过为进程分配进程ID并配置特定的配置文件,其明确了各进程的通讯对象,从而避免了其它无关进程的干扰;2)各进程使用本地套接字的方式进行相互通讯,方便对所有关联进程进行统一化管理;3)数据包采用数据头和数据区结合的方式,良好的写入数据格式有助于提高信息的传输效率以及数据解析效率;4)数据区采用固定大小和共享内存相结合的方式存储数据,简化了文件内容,提高了数据存储效率;以及5)通过良好的通讯方法,提高了各进程运行效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例的一种进程间通讯方法的流程图。
图2A为本发明第一实施例的数据发送的子步骤流程图。
图2B为本发明第一实施例的数据接收的子步骤流程图。
图3为本发明第二实施例的进程间通讯装置的模块示意图。
图4为本发明第二实施例的数据收发模块的内部单元示意图。
图5为本发明第三实施例的一种Linux设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
【第一实施例】
如图1所示,本发明第一实施例提供一种进程间通讯方法,适用于Linux设备,其例如包括以下步骤:
S11,目标进程启动后获取进程ID;
S13,目标进程基于获取的所述进程ID创建套接字,并使所述套接字与目标配置文件绑定;
S15,目标进程解析所述目标配置文件以得到所述目标配置文件包含的会话对象进程的进程ID,并创建与所述会话对象进程的所述进程ID相对应的会话结构体,其中所述会话结构体包括所述会话对象进程的所述进程ID、以及关联所述目标进程的所述套接字与所述会话对象进程的套接字之套接字描述符;以及
S17,数据发送或数据接收,例如当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包,或当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包。
为便于更清楚地理解本实施例的进程间通讯方法,以下各个步骤S11、S13、S15及S17进行详细说明。
在S11中,每一个进程在启动后会从进程ID(Process ID,简称PID)列表中获取一个进程ID作为各自的身份标识。进程ID可以由一串32位字符串唯一表示,并对应特定的字符串名字(或称进程名、进程别名)。进程ID的标识方法不限,举例而言,进程ID类似于Linux设备驱动中的ID,可以由card ID、Major ID、Minor ID及unit ID组成。
在S13中,每个进程基于获取的进程ID(例如根据进程ID对应的进程别名)创建套接字(Socket)例如UNIX本地套接字,并使创建的UNIX本地套接字绑定本地的配置文件,所述配置文件在Linux系统中按照特定方式在固定路径创建,比如:/usr/etc/usock_a或/usr/etc/usock_b。这样做有助于各个进程找到目标配置文件。本领域技术人员了解,Socket是一种Linux系统中的通信机制,可以实现不同主机间的进程通信,也可以实现跨网络通信。
在S15中,目标进程解析与其进程ID对应的套接字所绑定的配置文件,所述配置文件是预先创建的,依所述目标进程的具体进程内容而定。每个进程有各自对应的配置文件,各配置文件依各自进程而各不相同,在固定格式的路径+名字中。在需要与其它进程进行通讯的目标进程的配置文件中,涉及到其它进程的进程ID(或称为会话对象进程的进程ID),当然配置文件还优选地包括其它内容,例如进程类型信息、读写权限信息等。配置文件中包含的会话对象进程的进程ID、进程类型信息和读写权限信息典型地位于配置文件的表头。此处的进程类型信息例如选自于交互进程、批处理进程和监控进程(守护进程)。
当目标进程在绑定的配置文件中解析到其它进程的进程ID(或称为会话对象进程的进程ID)时,创建与会话对象进程的进程ID相对应的会话结构体。所述会话结构体包括会话对象进程的进程ID、以及关联目标进程的套接字与会话对象进程的套接字之套接字描述符(socket file description,sockfd)。再者,当配置文件中解析到大于一个其它进程的进程ID时,创建多于一个的会话结构体并形成会话链表。举例而言,进程A的配置文件中涉及进程B和进程C,即进程A需与进程B和进程C通讯,当进程A解析配置文件时,解析到进程B的进程ID和进程C的进程ID,则分别创建进程A和进程B的会话结构体AB、以及进程A和进程C的会话结构体AC。会话结构体AB包括进程B的ID--IDB、以及关联进程A的Socket与进程B的Socket的套接字描述符sockfdAB。会话结构体AC包括进程C的ID--IDC、以及关联进程A的Socket与进程C的Socket的套接字描述符sockfdAC。如此一来,目标进程就可以和与其创建了会话结构体的其他进程之间进行数据发送、数据接收等操作。
承上述,就数据发送过程而言,例如图2A所示,先获取指定会话对象进程的进程ID,该进程ID的获取可通过进程别名转换得到,别名和进程ID都在头文件中定义;以及根据获取的会话对象进程的进程ID查找会话链表中的会话结构体节点以得到相对应的套接字描述符sockfd。例如在S17中,当目标进程需要向指定会话对象进程发送数据时,在目标进程与指定会话对象进程的会话结构体中的所述套接字描述符内写入数据包。举例而言,当进程A需要向进程B发送数据DAB时,进程A在会话结构体AB中的套接字描述符sockfdAB中写入对应数据DAB的目标数据包;当进程A需要向进程C发送数据DAC时,进程A在会话结构体AC中的套接字描述符sockfdAC中写入对应数据DAC的目标数据包。
所述目标数据包整体包括控制头和数据段,所述控制头描述当前进程间的会话事件信息,同时可扩展为中断事件、IO时间。所述数据段包括数据头和数据区。所述数据头描述数据包信息,例如数据区大小、共享内存ID等。所述数据区的大小固定为预定字节,例如128字节(Bytes)。当目标进程需要向指定会话对象进程发送的数据大于预定字节时,例如大于128字节时,将所述需要发送的数据存储在共享内存中,并在写入所述套接字描述符中的目标数据包的数据头内写入共享内存ID。所述数据区包括头部、标签及尾部,所述头部描述标签个数和数据大小,每个标签代表一种事件,所述尾部放置一些事件相关信息。例如,当进程A检测到U盘插入,与进程B通讯时,所述头部描述标签个数为两个,分别为大标签和小标签,大标签定义为U盘事件,小标签定义为插入,所述尾部可以存放U盘挂载路径。
就数据接收过程而言,如图2B所示,监听创建的会话链表中所有的会话结构体节点,以及当监听到有事件触发时,查找触发事件的会话结构体节点以得到相对应的套接字描述符sockfd。例如步骤S17中,当目标进程需要接收来自某个会话对象进程发送的数据时,从所述会话结构体中的所述套接字描述符内读取会话对象进程发送的数据包。举例而言,当进程B接收来自进程A的数据DAB时,读取会话结构体AB中的套接字描述符sockfdAB,从而读取其中对应数据DAB的数据包;当进程C接收来自进程A的数据DAC时,读取会话结构体AC中的套接字描述符sockfdAC,从而读取其中对应数据DAC的数据包。此处需要说明的是,因为数据发送和数据接收涉及两个进程,某个进程发送数据时会触发另一个进程接收数据,因此并不限于进程B和进程C作为数据接收方,进程A同样可以作为数据接收方。
另外,值得一提的是,当作为数据接收方的进程在套接字描述符sockfd中的数据包内读取到共享内存ID时,通过所述共享内存ID查找到所述共享内存进而获取其中存储的数据。
本发明第一实施例提供的适用于Linux设备的进程间通讯方法可以具有以下技术效果:1)通过为进程分配进程ID并配置特定的配置文件,其明确了各进程的通讯对象,从而避免了其它无关进程的干扰;2)各进程使用本地套接字的方式进行相互通讯,方便对所有关联进程进行统一化管理;3)数据包采用数据头和数据区结合的方式,良好的写入数据格式有助于提高信息的传输效率以及数据解析效率;4)数据区采用固定大小和共享内存相结合的方式存储数据,简化了文件内容,提高了数据存储效率;以及5)通过良好的通讯方法,提高了各进程运行效率。
【第二实施例】
如图3所示,本发明第二实施例提供的一种进程间通讯装置30,适用于Linux设备且包括:进程ID获取模块31、创建及绑定模块33、解析及创建模块35和数据收发模块37。
其中,进程ID获取模块31例如用于供目标进程启动后获取进程ID;创建及绑定模块33例如用于供所述目标进程基于获取的所述进程ID创建套接字,并使所述套接字与目标配置文件绑定;解析及创建模块35例如用于供所述目标进程解析所述目标配置文件以得到所述目标配置文件包含的会话对象进程的进程ID,并创建与所述会话对象进程的所述进程ID相对应的会话结构体,其中所述会话结构体包括所述会话对象进程的所述进程ID、以及关联所述目标进程的所述套接字与所述会话对象进程的套接字之套接字描述符;以及数据收发模块37例如用于当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包,或当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包。
至于进程ID获取模块31、创建及绑定模块33、解析及创建模块35和数据收发模块37的具体功能细节可参考前述第一实施例中步骤S11、S13、S15和S17的相关描述,在此不再赘述。此外,值得一提的是,进程ID获取模块31、创建及绑定模块33、解析及创建模块35和数据收发模块37可以为软件模块,存储于非易失性存储器中且由处理器执行相关操作以进行前述第一实施例中的步骤S11、S13、S15和S17。
参见图4,本实施例的数据收发模块37例如包括:获取单元3711、第一查找单元3713、第一确定单元3715、写单元3717、监听单元3731、第二查找单元3733、第二确定单元3735和读单元3737。
其中,获取单元3711、第一查找单元3713、第一确定单元3715和写单元3717应用于数据发送。具体而言,获取单元3711例如用于获取所述会话对象进程的所述进程ID;第一查找单元3713例如用于根据获取的所述会话对象进程的所述进程ID查找所述会话链表中的会话结构体节点;第一确定单元3715例如用于确定查找到的所述会话结构体节点的所述套接字描述符;以及写单元3717例如用于向确定的所述套接字描述符内写入所述目标数据包。至于获取单元3711、第一查找单元3713、第一确定单元3715和写单元3717的具体功能细节可参考前述第一实施例中图2A所示的各个子步骤的相关描述,在此不再赘述。
承上述,监听单元3731、第二查找单元3733、第二确定单元3735和读单元3737应用于数据接收。具体而言,监听单元3731例如用于监听会话链表中的会话结构体节点;第二查找单元3733例如用于当有事件触发时从所述会话链表中查找触发所述事件的会话结构体节点;第二确定单元3735例如用于确定查到的所述会话结构体节点中的套接字描述符;以及读单元3737例如用于从确定的所述套接字描述符内读取数据包。至于监听单元3731、第二查找单元3733、第二确定单元3735和读单元3737的具体功能细节可参考前述第一实施例中图2B所示的各个子步骤的相关描述,在此不再赘述。
本发明第二实施例提供的适用于Linux设备的进程间通讯装置可以具有以下技术效果:1)通过为进程分配进程ID并配置特定的配置文件,其明确了各进程的通讯对象,从而避免了其它无关进程的干扰;2)各进程使用本地套接字的方式进行相互通讯,方便对所有关联进程进行统一化管理;3)数据包采用数据头和数据区结合的方式,良好的写入数据格式有助于提高信息的传输效率以及数据解析效率;4)数据区采用固定大小和共享内存相结合的方式存储数据,简化了文件内容,提高了数据存储效率;以及5)通过良好的通讯方法,提高了各进程运行效率。
【第三实施例】
如图5所示,本发明第三实施例提供一种Linux设备50,其包括处理器51和存储器52;其中存储器52存储有处理器51执行的指令,且所述指令使得处理器51执行操作以进行如第一实施例所述的进程间通讯方法。
本发明第三实施例提供的Linux设备也可以具有类似于前述第一实施例的以下技术效果:1)通过为进程分配进程ID并配置特定的配置文件,其明确了各进程的通讯对象,从而避免了其它无关进程的干扰;2)各进程使用本地套接字的方式进行相互通讯,方便对所有关联进程进行统一化管理;3)数据包采用数据头和数据区结合的方式,良好的写入数据格式有助于提高信息的传输效率以及数据解析效率;4)数据区采用固定大小和共享内存相结合的方式存储数据,简化了文件内容,提高了数据存储效率;以及5)通过良好的通讯方法,提高了各进程运行效率。
在其他实施例中,还提供的一种计算机可读存储介质,其为非易失性存储器且存储有程序代码,所述程序代码被一个或多个处理器执行时可以实现前述第一实施例所述的进程间通讯方法。
此外,可以理解的是,前述各个实施例仅为本发明的示例性说明,在技术特征不冲突、结构不矛盾、不违背本发明的发明目的前提下,各个实施例的技术方案可以任意组合、搭配使用。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和/或方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多路单元或模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元/模块可以是或者也可以不是物理上分开的,作为单元/模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多路网络单元上。可以根据实际的需要选择其中的部分或者全部单元/模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元/模块可以集成在一个处理单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一个单元/模块中。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用硬件加软件功能单元/模块的形式实现。
上述以软件功能单元/模块的形式实现的集成的单元/模块,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)的一个或多个处理器执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (14)
1.一种进程间通讯方法,其特征在于,适用于Linux设备且包括:
目标进程启动后获取进程ID;
所述目标进程基于获取的所述进程ID创建套接字,并使所述套接字与目标配置文件绑定;
所述目标进程解析所述目标配置文件以得到所述目标配置文件包含的会话对象进程的进程ID,并创建与所述会话对象进程的所述进程ID相对应的会话结构体,其中所述会话结构体包括所述会话对象进程的所述进程ID、以及关联所述目标进程的所述套接字与所述会话对象进程的套接字之套接字描述符;以及
当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包,或当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包。
2.如权利要求1所述的进程间通讯方法,其特征在于,所述目标数据包包括控制头和数据段,所述控制头描述会话事件信息,所述数据段包括数据头和数据区,所述数据头描述数据包信息,所述数据区的大小为预定字节。
3.如权利要求2所述的进程间通讯方法,其特征在于,当所述目标进程需要向所述会话对象进程发送的数据大于所述预定字节时,将所述发送的数据存储在共享内存中,并在所述目标数据包中写入共享内存ID。
4.如权利要求3所述的进程间通讯方法,其特征在于,所述共享内存ID位于所述目标数据包的所述数据头中。
5.如权利要求2所述的进程间通讯方法,其特征在于,所述数据区包括头部、标签及尾部,所述头部描述标签个数和数据大小,所述标签表示事件,所述尾部放置事件相关信息。
6.如权利要求1所述的进程间通讯方法,其特征在于,所述配置文件包含所述会话对象进程的所述进程ID、进程类型和读写权限,且位于所述配置文件的表头。
7.如权利要求1所述的进程间通讯方法,其特征在于,所述目标配置文件包含多个会话对象进程的进程ID,相应地创建与每一个所述会话对象进程的所述进程ID相对应的会话结构体以形成会话链表,其中创建的每一个所述会话结构体作为所述会话链表中的一个会话结构体节点。
8.如权利要求7所述的进程间通讯方法,其特征在于,所述当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包具体包括:
所述目标进程获取所述会话对象进程的所述进程ID,根据获取的所述会话对象进程的所述进程ID查找所述会话链表中的会话结构体节点,确定查找到的所述会话结构体节点的套接字描述符,以及向确定的所述套接字描述符内写入目标数据包;
所述当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包具体包括:
所述目标进程监听所述会话链表中的会话结构体节点,当有事件触发时从所述会话链表中查找触发所述事件的会话结构体节点,确定查到的所述会话结构体节点中的套接字描述符,以及从确定的所述套接字描述符内读取数据包。
9.如权利要求1所述的进程间通讯方法,其特征在于,所述配置文件包含所述会话对象进程的所述进程ID、进程类型信息和读写权限信息。
10.一种进程间通讯装置,其特征在于,适用于Linux设备且包括:
进程ID获取模块,用于供目标进程启动后获取进程ID;
创建及绑定模块,用于供所述目标进程基于获取的所述进程ID创建套接字,并使所述套接字与目标配置文件绑定;
解析及创建模块,用于供所述目标进程解析所述目标配置文件以得到所述目标配置文件包含的会话对象进程的进程ID,并创建与所述会话对象进程的所述进程ID相对应的会话结构体,其中所述会话结构体包括所述会话对象进程的所述进程ID、以及关联所述目标进程的所述套接字与所述会话对象进程的套接字之套接字描述符;以及
数据收发模块,用于当所述目标进程需要向所述会话对象进程发送数据时,在与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内写入目标数据包,或当所述目标进程监听到所述会话对象进程向所述目标进程发送数据时,从与所述会话对象进程的所述进程ID相对应的所述会话结构体中的所述套接字描述符内读取数据包。
11.如权利要求10所述的进程间通讯装置,其特征在于,所述目标数据包包括控制头和数据段,所述控制头描述会话事件信息,所述数据段包括数据头和数据区,所述数据头描述数据包信息,所述数据区的大小为预定字节。
12.如权利要求11所述的进程间通讯装置,其特征在于,当所述目标进程需要向所述会话对象进程发送的数据大于所述预定字节时,将所述发送的数据存储在共享内存中,并在所述目标数据包中写入共享内存ID。
13.如权利要求10所述的进程间通讯装置,其特征在于,所述目标配置文件包含多个会话对象进程的进程ID,相应地创建与每一个所述会话对象进程的所述进程ID相对应的会话结构体以形成会话链表;
所述数据收发模块包括:
获取单元,用于获取所述会话对象进程的所述进程ID;
第一查找单元,用于根据获取的所述会话对象进程的所述进程ID查找所述会话链表中的会话结构体节点;
第一确定单元,用于确定查找到的所述会话结构体节点的所述套接字描述符;以及
写单元,用于向确定的所述套接字描述符内写入所述目标数据包;
所述数据收发模块还包括:
监听单元,用于监听会话链表中的会话结构体节点;
第二查找单元,用于当有事件触发时从所述会话链表中查找触发所述事件的会话结构体节点;
第二确定单元,用于确定查到的所述会话结构体节点中的套接字描述符;以及
读单元,用于从确定的所述套接字描述符内读取数据包。
14.一种Linux设备,包括:处理器和存储器;其中所述存储器存储有所述处理器执行的指令,且所述指令使得所述处理器执行操作以进行如权利要求1至9任意一项所述的进程间通讯方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910587610.9A CN112181670B (zh) | 2019-07-02 | 2019-07-02 | 进程间通讯方法及装置和Linux设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910587610.9A CN112181670B (zh) | 2019-07-02 | 2019-07-02 | 进程间通讯方法及装置和Linux设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112181670A true CN112181670A (zh) | 2021-01-05 |
CN112181670B CN112181670B (zh) | 2023-04-11 |
Family
ID=73915845
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910587610.9A Active CN112181670B (zh) | 2019-07-02 | 2019-07-02 | 进程间通讯方法及装置和Linux设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112181670B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112804549A (zh) * | 2021-01-15 | 2021-05-14 | 北京字节跳动网络技术有限公司 | 直播数据处理方法及设备 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1975680A (zh) * | 2006-11-27 | 2007-06-06 | 浙江大学 | 基于Java的进程间异步通信的实现方法 |
US20090228970A1 (en) * | 2008-03-07 | 2009-09-10 | Nec Corporation | Gateway device having socket library for monitoring, communication method of gateway device having socket library for monitoring, and communication program of gateway device having socket library for monitoring |
CN102135917A (zh) * | 2010-11-30 | 2011-07-27 | 广东星海数字家庭产业技术研究院有限公司 | Linux操作系统进程间通信信息的获取方法 |
US20110271087A1 (en) * | 2010-04-30 | 2011-11-03 | International Business Machines Corporation | Embedding process identification information in a pathname to indicate process status |
CN103117895A (zh) * | 2013-01-25 | 2013-05-22 | 哈尔滨工业大学 | 一种lxi仪器的服务监听方法 |
CN103176854A (zh) * | 2011-12-26 | 2013-06-26 | 腾讯科技(深圳)有限公司 | 一种进程间通信方法、装置及系统 |
CN103544102A (zh) * | 2013-09-02 | 2014-01-29 | 烟台中科网络技术研究所 | 一种软件性能测试模拟方法及装置 |
CN104102550A (zh) * | 2013-04-12 | 2014-10-15 | 南京南瑞继保电气有限公司 | 一种多主机进程间通信的方法 |
CN104346229A (zh) * | 2014-11-14 | 2015-02-11 | 国家电网公司 | 一种用于嵌入式操作系统进程间通讯优化的处理方法 |
CN106776063A (zh) * | 2016-11-29 | 2017-05-31 | 北京元心科技有限公司 | 移动终端、容器电话通讯功能实现方法及跨容器通信方法 |
CN106997304A (zh) * | 2016-01-22 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 输入输出事件的处理方法及设备 |
CN107608852A (zh) * | 2017-09-01 | 2018-01-19 | 清华大学 | 一种进程监控方法及装置 |
-
2019
- 2019-07-02 CN CN201910587610.9A patent/CN112181670B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1975680A (zh) * | 2006-11-27 | 2007-06-06 | 浙江大学 | 基于Java的进程间异步通信的实现方法 |
US20090228970A1 (en) * | 2008-03-07 | 2009-09-10 | Nec Corporation | Gateway device having socket library for monitoring, communication method of gateway device having socket library for monitoring, and communication program of gateway device having socket library for monitoring |
US20110271087A1 (en) * | 2010-04-30 | 2011-11-03 | International Business Machines Corporation | Embedding process identification information in a pathname to indicate process status |
CN102135917A (zh) * | 2010-11-30 | 2011-07-27 | 广东星海数字家庭产业技术研究院有限公司 | Linux操作系统进程间通信信息的获取方法 |
CN103176854A (zh) * | 2011-12-26 | 2013-06-26 | 腾讯科技(深圳)有限公司 | 一种进程间通信方法、装置及系统 |
CN103117895A (zh) * | 2013-01-25 | 2013-05-22 | 哈尔滨工业大学 | 一种lxi仪器的服务监听方法 |
CN104102550A (zh) * | 2013-04-12 | 2014-10-15 | 南京南瑞继保电气有限公司 | 一种多主机进程间通信的方法 |
CN103544102A (zh) * | 2013-09-02 | 2014-01-29 | 烟台中科网络技术研究所 | 一种软件性能测试模拟方法及装置 |
CN104346229A (zh) * | 2014-11-14 | 2015-02-11 | 国家电网公司 | 一种用于嵌入式操作系统进程间通讯优化的处理方法 |
CN106997304A (zh) * | 2016-01-22 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 输入输出事件的处理方法及设备 |
CN106776063A (zh) * | 2016-11-29 | 2017-05-31 | 北京元心科技有限公司 | 移动终端、容器电话通讯功能实现方法及跨容器通信方法 |
CN107608852A (zh) * | 2017-09-01 | 2018-01-19 | 清华大学 | 一种进程监控方法及装置 |
Non-Patent Citations (2)
Title |
---|
周莉: "Netlink套接字在Linux系统通信中的应用研究", 《计算机与现代化》 * |
王文义: "Linux中进程间信号通信机制的分析及其应用", 《计算机工程与应用》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112804549A (zh) * | 2021-01-15 | 2021-05-14 | 北京字节跳动网络技术有限公司 | 直播数据处理方法及设备 |
CN112804549B (zh) * | 2021-01-15 | 2023-07-28 | 北京字节跳动网络技术有限公司 | 直播数据处理方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112181670B (zh) | 2023-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10362083B2 (en) | Policy-based payload delivery for transport protocols | |
US20170185678A1 (en) | Crawler system and method | |
CN112714047B (zh) | 基于工控协议流量的测试方法、装置、设备及存储介质 | |
AU2017226398B2 (en) | Service implementation method, apparatus and system based on fix protocol | |
WO2017000593A1 (zh) | 报文处理方法及装置 | |
KR100845234B1 (ko) | 통신 소프트웨어 구조에서의 도메인 프로파일 파싱 장치 및그 방법 | |
EP2947582A1 (en) | Computing device and method for executing database operation command | |
CN111352889A (zh) | 一种基于mctp协议的设备管理方法、设备、装置和介质 | |
CN112448969A (zh) | 链路追踪方法、装置、系统、设备及可读存储介质 | |
CN105389120A (zh) | 支持通过活动消息的rma api | |
EP3896940A1 (en) | Resource description file processing, and page resource obtaining method and device | |
CN105592169B (zh) | 终端识别方法及装置 | |
CN108182119B (zh) | 读写分离控制方法和装置、存储介质及电子装置 | |
CN114978880B (zh) | 服务调用链追踪方法、系统、计算机及存储介质 | |
CN112181670B (zh) | 进程间通讯方法及装置和Linux设备 | |
WO2014190700A1 (zh) | 一种内存访问的方法、缓冲调度器和内存模块 | |
CN111859062B (zh) | 一种基于dpdk的网络数据处理方法和装置 | |
CN109766347B (zh) | 一种数据更新方法、装置、系统、计算机设备及存储介质 | |
US20160126976A1 (en) | Methods, systems, and computer readable media for optimized message decoding | |
TWI611344B (zh) | 記憶體系統協定中提供檔案資訊之系統及方法 | |
CN113852610B (zh) | 报文处理方法、装置、计算机设备和存储介质 | |
CN108845995A (zh) | 数据处理方法、装置、存储介质和电子装置 | |
CN113808711A (zh) | Dicom文件处理方法、装置、计算机设备和存储介质 | |
CN108712394B (zh) | 一种射频识别方法及标签 | |
CN111865794B (zh) | 一种逻辑端口的关联方法、系统、设备及数据传输系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |