CN112256339B - 多进程管理方法、装置、电子设备和存储介质 - Google Patents
多进程管理方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112256339B CN112256339B CN201910663207.XA CN201910663207A CN112256339B CN 112256339 B CN112256339 B CN 112256339B CN 201910663207 A CN201910663207 A CN 201910663207A CN 112256339 B CN112256339 B CN 112256339B
- Authority
- CN
- China
- Prior art keywords
- function
- subprocess
- dynamic link
- main function
- preset
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 263
- 238000007726 management method Methods 0.000 title claims abstract description 38
- 230000008569 process Effects 0.000 claims abstract description 172
- 238000012545 processing Methods 0.000 claims abstract description 106
- 238000004891 communication Methods 0.000 claims abstract description 79
- 230000006870 function Effects 0.000 claims description 193
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004458 analytical method Methods 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 8
- 239000002699 waste material Substances 0.000 abstract description 6
- 230000004048 modification Effects 0.000 abstract description 3
- 238000012986 modification Methods 0.000 abstract description 3
- 230000001419 dependent effect Effects 0.000 abstract 1
- 238000002347 injection Methods 0.000 description 4
- 239000007924 injection Substances 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000019771 cognition Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提出一种多进程管理方法、装置、电子设备和存储介质,其中,方法包括:监测到父进程发送请求信息时调用子进程预设动态链接库中的钩子函数通过预设通信方式接收父进程发送的请求信息;解析请求信息获取处理参数;通过钩子函数将处理参数发送给子进程主函数;钩子函数获取主函数根据处理参数处理的结果,并将处理结果通过预设通信方式发送给父进程。解决非独立编译技术需要对第三方软件代码或编译做较大的修改和调整,解决多进程技术独立编译父进程和子进程,父进程不能控制子进程逻辑,重复加载子进程致系统资源浪费,子进程动态链接库通过钩子函数调用子进程主函数进行处理,有效控制独立编译后加载了第三方软件子进程的生命周期和逻辑。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种多进程管理方法、装置、电子设备和存储介质。
背景技术
目前,主要通过多线程和多进程技术来提高CPU(中央处理器,CentralProcessing Unit)的利用率,但多线程无法实现进程隔离,很容易导致线程运行所在进程崩溃。
在多进程相关技术中,子进程代码在父进程代码编译时一起编译出来,以一个可执行的文件的形式提供,需要对子进程的代码或者编译做比较大的修改和整合,或者是父进程启动一个独立的子进程,子进程内部的逻辑不受父进程控制,然而,不能控制子进程的逻辑,一般子进程执行完后会退出,下次启动时,又要将其加载入内存并进行一系列初始化,浪费较多的CPU资源。
申请内容
本申请旨在至少在一定程度上解决上述相关技术中的技术问题之一。
为此,本申请的第一个目的在于提出一种多进程管理方法,解决了现有技术中多进程技术中需要对子进程的代码或者编译做比较大的修改和整合、以及不能控制子进程生命周期和逻辑,频繁加载第三方软件到子进程,容易导致CPU资源浪费的问题,通过在子进程的动态链接库中通过钩子函数调用子进程主函数的方式进行处理,可以有效控制独立编译后加载第三方软件的子进程的内部逻辑和生命周期,实现了多进程接近于多线程的性能,并且有效控制异常发生,保证服务不会崩溃的情况,具有广泛的通用性。
本申请的第二个目的在于提出一种多进程管理装置。
本申请的第三个目的在于提出一种计算机设备。
本申请的第四个目的在于提出一种非临时性计算机可读存储介质。
为达上述目的,本申请第一方面实施例提出了一种多进程管理方法,包括:在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息;对所述请求信息进行解析获取处理参数;通过所述钩子函数将所述处理参数发送给所述子进程的主函数;通过所述钩子函数获取所述主函数根据所述处理参数进行处理生成的处理结果,并将所述处理结果通过所述预设通信方式发送给所述父进程。
另外,本申请实施例的多进程管理方法,还具有如下附加的技术特征:
可选地,在所述在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息之前,还包括:通过预先加载方式加载所述预设动态链接;在所述动态链接库中执行预设逻辑运算对所述子进程的主函数进行钩子处理,以使在所述动态链接库中通过所述钩子函数调用所述子进程的主函数。
可选地,在所述通过预先加载方式加载所述预设动态链接之前,还包括:判断所述子进程的主函数是否在函数符号列表中;若子进程的主函数不在函数符号表中,则在编译参数中增加预设参数以使在所述函数符号列表中具有所述子进程的主函数。
可选地,所述调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息,包括:获取父进程发送的通信标识;根据所述通信标识确定通信方式;所述钩子函数通过所述通信方式接收父进程发送的请求信息;其中,所述通信方式为管道、共享内存和网络中的一种或者多种。
可选地,所述的方法,还包括:若通过所述动态链接库中的钩子函数接收到所述父进程发送的退出指令,则进行退出操作;若通过所述动态链接库中钩子函数没有接收到所述父进程发送的退出指令,则继续将处理参数转发给所述子进程的主函数。
为达上述目的,本申请第二方面实施例提出了一种多进程管理装置,包括:调用模块,用于在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息;解析模块,用于对所述请求信息进行解析获取处理参数;第一发送模块,用于通过所述钩子函数将所述处理参数发送给所述子进程的主函数;处理模块,用于通过所述钩子函数获取所述主函数根据所述处理参数进行处理生成的处理结果;第二发送模块,用于将所述处理结果通过所述预设通信方式发送给所述父进程。
另外,本申请实施例的多进程管理装置,还具有如下附加的技术特征:
可选地,所述的装置,还包括:加载模块,用于通过预先加载方式加载所述预设动态链接;执行模块,用于在所述动态链接库中执行预设逻辑运算对所述子进程的主函数进行钩子处理,以使在所述动态链接库中通过所述钩子函数调用所述子进程的主函数。
可选地,所述装置,还包括:判断模块,用于判断所述子进程的主函数是否在函数符号列表中;增加模块,用于若子进程的主函数不在函数符号表中,则在编译参数中增加预设参数以使在所述函数符号列表中具有所述子进程的主函数。
可选地,所述调用模块,具体用于:获取父进程发送的通信标识;根据所述通信标识确定通信方式;所述钩子函数通过所述通信方式接收父进程发送的请求信息;其中,所述通信方式为管道、共享内存和网络中的一种或者多种。
可选地,所述的装置,其特征在,还包括:退出模块,用于若通过所述动态链接库中的钩子函数接收到所述父进程发送的退出指令,则进行退出操作;所述第一发送模块,还用于若通过所述动态链接库中钩子函数没有接收到所述父进程发送的退出指令,则继续将处理参数转发给所述子进程的主函数。
为达上述目的,本申请第三方面实施例提出了一种计算机设备,包括:处理器和存储器;其中,所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于实现如第一方面实施例所述的多进程管理方法。
为达上述目的,本申请第四方面实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面实施例所述的多进程管理方法。
为达上述目的,本申请第五方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令由处理器执行时,实现如第一方面实施例所述的多进程管理方法。
本申请实施例提供的技术方案可以包含如下的有益效果:
通过在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收父进程发送的请求信息;对请求信息进行解析获取处理参数;通过钩子函数将处理参数发送给子进程的主函数;通过钩子函数获取主函数根据处理参数进行处理生成的处理结果,并将处理结果通过预设通信方式发送给父进程。有效解决了现有技术中多进程技术中需要对子进程的代码或者编译做比较大的修改和整合、以及不能控制子进程生命周期和逻辑,频繁加载第三方软件到子进程,容易导致CPU资源浪费的的问题,通过在子进程的动态链接库中通过钩子函数调用子进程主函数的方式进行处理,可以有效控制独立编译后加载第三方软件的子进程的内部逻辑和生命周期,实现了多进程接近于多线程的性能,并且有效控制异常发生,保证服务不会崩溃的情况,具有广泛的通用性。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是根据本申请一个实施例的多进程管理方法的流程图;
图2是根据本申请另一个实施例的多进程管理方法的流程图;
图3是根据本申请一个实施例的多进程管理装置的结构示意图;
图4是根据本申请另一个实施例的多进程管理装置的结构示意图;
图5是根据本申请又一个实施例的多进程管理装置的结构示意图;
图6是根据本申请再一个实施例的多进程管理装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
下面参考附图描述本申请实施例的多进程管理方法、装置、电子设备和存储介质。
图1是根据本申请一个实施例的多进程管理方法的流程图,如图1所示,该方法包括:
步骤101,通过在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收父进程发送的请求信息。
在实际应用当中,多线程是指在从软件或者硬件上实现多个线程并发执行的技术,可能会因为线程崩溃导致进程崩溃,从而整个进程退出,导致服务不可用。进程是指同时运行多个进程,并且这些进程接受一定程度管理的技术方案,只要保证作为对外提供服务的进程存活,其他业务进程即使崩溃了,并不会导致整个服务不可用。因此,为了避免整个服务不会出现不可用的情况,本申请针对的是多进程管理的处理。
在多进程相关技术中,子进程代码在父进程代码编译时一起编译出来,以一个可执行的文件的形式提供,需要对子进程的代码或者编译做比较大的修改和整合,或者是父进程启动一个独立的子进程,子进程内部的逻辑不受父进程控制,导致不能控制子进程的逻辑,一般子进程执行完后会退出,下次启动时,又要将其加载入内存并进行一系列初始化,浪费较多的CPU资源的技术问题。
本申请针对上述问题,提出一种多进程管理方法,通过在子进程的动态链接库中通过钩子函数调用子进程主函数的方式进行处理,可以有效控制独立编译后加载第三方软件的子进程的内部逻辑和生命周期,实现了多进程接近于多线程的性能,并且有效控制异常发生,保证服务不会崩溃的情况,具有广泛的通用性。
具体地,同时运行多个进程的方案中,启动别的进程的进程叫做父进程,被启动的叫做子进程,子进程也可以启动进程,这样它就成为其子进程的父进程,如果子进程意外退出,父进程可以选择退出或者不退出,父进程退出时,可以选择是否通知子进程也要退出。
因此,在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数来接收父进程发送的请求信息。
可以理解的是,预先在子进程的主函数执行之前,通过注入方案或者预先加载方案等加载方式加载一个动态链接库,在动态链接库中执行预设逻辑运算(比如全局变量初始化等)对子进程的主函数进行钩子处理,使得在动态链接库中通过钩子函数调用子进程主函数。
其中,预设通信方式有很多种,可以根据需要进行选择设置,作为一种示例,获取父进程发送的通信标识,根据通信标识确定通信方式,比如通过对通信标识A进行识别确定通信方式为管道,管道是在启动子进程之前,父进程动态创建的,把管道对应的通信标识给子进程,子进程就可以操作该管道;再比如通过对通信标识B进行识别确定通信方式为共享内存。
其中,请求信息可以根据实际任务需要生成,比如执行1加2操作,生成包括1和2处理参数的请求信息。
步骤102,对请求信息进行解析获取处理参数。
步骤103,通过钩子函数将处理参数发送给子进程的主函数。
步骤104,通过钩子函数获取主函数根据处理参数进行处理生成的处理结果。
步骤105,将处理结果通过预设通信方式发送给父进程。
具体地,在钩子函数通过预设通信方式接收父进程发送的请求信息后,对请求信息进行解析获取处理参数,将处理参数传递给子进程的主函数进行处理得到处理结果(比如标准输出、错误输出以及文件操作中一种或者多种),钩子函数对处理结果进行托管保存,并将处理结果通过预设通信方式发送给父进程。
综上,本申请实施例的多进程管理方法,通过在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收父进程发送的请求信息;对请求信息进行解析获取处理参数;通过钩子函数将处理参数发送给子进程的主函数;通过钩子函数获取主函数根据处理参数进行处理生成的处理结果,并将处理结果通过预设通信方式发送给父进程。有效解决了现有技术中多进程技术中需要对子进程的代码或者编译做比较大的修改和整合、以及不能控制子进程生命周期和逻辑,频繁加载第三方软件到子进程,容易导致CPU资源浪费的的问题,通过在子进程的动态链接库中通过钩子函数调用子进程主函数的方式进行处理,可以有效控制独立编译后加载第三方软件的子进程的内部逻辑和生命周期,实现了多进程接近于多线程的性能,并且有效控制异常发生,保证服务不会崩溃的情况,具有广泛的通用性。
图2是根据本申请另一个实施例的多进程管理方法的流程图,如图2所示,该方法包括:
步骤201,判断子进程的主函数是否在函数符号列表中,若子进程的主函数不在函数符号表中,则在编译参数中增加预设参数以使在函数符号列表中具有子进程的主函数。
具体地,首先判断子进程(通常是可执行文件)的主函数是否在函数符号表中,若不在,则在编译参数中增加预设参数,也就是说,如果子进程的主函数可以在函数符号表中找到,则不用做任何修改;如果找不到,则在编译参数中新增预设参数比如为-rdynamic。
步骤202,通过预先加载方式加载预设动态链接,在动态链接库中执行预设逻辑运算对子进程的主函数进行钩子处理,以使在动态链接库中通过钩子函数调用子进程的主函数。
具体地,在子进程的主函数执行之前,通过注入方案(利用注册表注入、库打桩机制、利用远程线程注入等)或者预先加载方案加载一个动态链接库,在动态链接库中执行预设逻辑运算(比如全局变量初始化等方式)对子进程的主函数进行钩子处理,在动态链接库中通过钩子函数调用子进程主函数。
也就是说,可以使用将动态链接库的路径写入子进程的地址内来加载动态链接库或者PRE_LOAD方案,让子进程在主函数执行之前,加载一个动态链接库,动态链接库中的逻辑通过一些方式,比如全局变量初始化,在主数执行之前执行,这段逻辑负责Hook子进程的main函数,以及一些和文件系统相关的函数。
步骤203,在监测到父进程发送请求信息时,获取父进程发送的通信标识,根据通信标识确定通信方式,调用子进程的预设动态链接库中的钩子函数通过通信方式接收父进程发送的请求信息。
其中,预设通信方式有很多种,可以根据需要进行选择设置,作为一种示例,获取父进程发送的通信标识,根据通信标识确定通信方式,比如通过对通信标识A进行识别确定通信方式为管道,管道是在启动子进程之前,父进程动态创建的,把管道对应的通信标识给子进程,子进程就可以操作该管道;再比如通过对通信标识B进行识别确定通信方式为共享内存。
其中,请求信息可以根据实际任务需要生成,比如执行1加2操作,生成包括1和2处理参数的请求信息。
步骤204,对请求信息进行解析获取处理参数,通过钩子函数将处理参数发送给子进程的主函数,通过钩子函数获取主函数根据处理参数进行处理生成的处理结果,并将处理结果通过预设通信方式发送给父进程。
具体地,在钩子函数通过预设通信方式接收父进程发送的请求信息后,对请求信息进行解析获取处理参数,将处理参数传递给子进程的主函数进行处理得到处理结果(比如标准输出、错误输出以及文件操作中一种或者多种),钩子函数对处理结果进行托管保存,并将处理结果通过预设通信方式发送给父进程。
也就是说,子进程中的主函数被钩子处理(HOOK)后,其地址将会被保留,为了后续方便,将其命名为origin_main,被替换后的主函数是之前被加载的动态库中的钩子函数,为了后续方便描述,将其命名为stub_main,这样子进程的主函数将会被替换成stub_main,父进程传递给子进程的通信标识、处理参数等请求信息将会被传递给stub_main,stub_main通过解析请求信息,获取与父进程通信的渠道,比如父进程作为服务,它接受网络请求后,将请求信息通过管道等通信手段传递给子进程。
从而,子进程是在stub_main函数中接收该处理参数,然后再将处理参数传递给origin_main,由于stub_main中接管了标准、错误输出以及在之前hook中接管了文件系统相关函数,可以让origin_main产生的处理结果被托管,这些信息经过处理后,被stub_main传递回主进程。
步骤205,若通过动态链接库中的钩子函数接收到父进程发送的退出指令,则进行退出操作。
步骤206,若通过动态链接库中钩子函数没有接收到父进程发送的退出指令,则继续将处理参数转发给子进程的主函数。
具体地,若动态链接库中钩子函数接收到父进程发送的退出指令,则进行退出操作;若没有,则继续将相关指令转发给子进程的主函数,也就说上述中的stub_main函数将一直等待父进程发送过来的退出指令而主动退出,可以有效的控制子进程内部逻辑。
综上,本申请实施例的多进程管理方法,通过判断子进程的主函数是否在函数符号列表中,若子进程的主函数不在函数符号表中,则在编译参数中增加预设参数以使在函数符号列表中具有子进程的主函数,并通过预先加载方式加载预设动态链接,在动态链接库中执行预设逻辑运算对子进程的主函数进行钩子处理,以使在动态链接库中通过钩子函数调用子进程的主函数,在监测到父进程发送请求信息时,获取父进程发送的通信标识,根据通信标识确定通信方式,调用子进程的预设动态链接库中的钩子函数通过通信方式接收父进程发送的请求信息,对请求信息进行解析获取处理参数,通过钩子函数将处理参数发送给子进程的主函数,通过钩子函数获取主函数根据处理参数进行处理生成的处理结果,并将处理结果通过预设通信方式发送给父进程,若通过动态链接库中的钩子函数接收到父进程发送的退出指令,则进行退出操作,若通过动态链接库中钩子函数没有接收到父进程发送的退出指令,则继续将处理参数转发给子进程的主函数。由此,解决了需要对子进程的代码或者编译做比较大的修改和整合、以及不能控制子进程生命周期和逻辑,频繁加载第三方软件到子进程,容易导致CPU资源浪费的的问题,不需要对子进程相关的领域有太多的认知就可以使用,通过在子进程的动态链接库中通过钩子函数调用子进程主函数的方式进行处理,可以有效控制独立编译后加载第三方软件的子进程的内部逻辑和生命周期,实现了多进程接近于多线程的性能,并且有效控制异常发生,保证服务不会崩溃的情况,具有广泛的通用性。
为了实现上述实施例,本申请还提出了一种多进程管理装置。图3是根据本申请一个实施例的多进程管理装置的结构示意图,如图3所示,该多进程管理装置包括:调用模块301、解析模块302、第一发送模块303、处理模块304和第二发送模块305,其中,
调用模块301,用于在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息。
解析模块302,用于对所述请求信息进行解析获取处理参数。
第一发送模块303,用于通过所述钩子函数将所述处理参数发送给所述子进程的主函数。
处理模块304,用于通过所述钩子函数获取所述主函数根据所述处理参数进行处理生成的处理结果。
第二发送模块305,用于将所述处理结果通过所述预设通信方式发送给所述父进程。
在本申请的一个实施例中,如图4所示,在如图3所示的基础上,还包括:加载模块306和执行模块307。
其中,加载模块306,用于通过预先加载方式加载所述预设动态链接。
执行模块307,用于在所述动态链接库中执行预设逻辑运算对所述子进程的主函数进行钩子处理,以使在所述动态链接库中通过所述钩子函数调用所述子进程的主函数。
在本申请的一个实施例中,在本申请的一个实施例中,如图5所示,在如图4所示的基础上,还包括:判断模块308和增加模块309。
其中,判断模块308,用于判断所述子进程的主函数是否在函数符号列表中;
增加模块309,用于若子进程的主函数不在函数符号表中,则在编译参数中增加预设参数以使在所述函数符号列表中具有所述子进程的主函数。
在本申请的一个实施例中,调用模块301,具体用于:获取父进程发送的通信标识;根据所述通信标识确定通信方式;所述钩子函数通过所述通信方式接收父进程发送的请求信息;其中,所述通信方式为管道、共享内存和网络中的一种或者多种。
在本申请的一个实施例中,在本申请的一个实施例中,如图6所示,在如图3所示的基础上,还包括:退出模块310。
退出模块310,用于若通过所述动态链接库中的钩子函数接收到所述父进程发送的退出指令,则进行退出操作。
第一发送模块303,还用于若通过所述动态链接库中钩子函数没有接收到所述父进程发送的退出指令,则继续将处理参数转发给所述子进程的主函数。
需要说明的是,前述对多进程管理方法实施例的解释说明也适用于该实施例的多进程管理装置,此处不再赘述。
综上,本申请实施例的多进程管理装置,通过在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收父进程发送的请求信息;对请求信息进行解析获取处理参数;通过钩子函数将处理参数发送给子进程的主函数;通过钩子函数获取主函数根据处理参数进行处理生成的处理结果,并将处理结果通过预设通信方式发送给父进程。有效解决了现有技术中多进程技术中需要对子进程的代码或者编译做比较大的修改和整合、以及不能控制子进程生命周期和逻辑,频繁加载第三方软件到子进程,容易导致CPU资源浪费的的问题,通过在子进程的动态链接库中通过钩子函数调用子进程主函数的方式进行处理,可以有效控制独立编译后加载第三方软件的子进程的内部逻辑和生命周期,实现了多进程接近于多线程的性能,并且有效控制异常发生,保证服务不会崩溃的情况,具有广泛的通用性。
为了实现上述实施例,本申请还提出一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现如前述实施例所描述的多进程管理方法。
为了实现上述实施例,本申请还提出一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述方法实施例所描述的多进程管理方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (8)
1.一种多进程管理方法,其特征在于,包括以下步骤:
判断子进程的主函数是否在函数符号列表中;
若子进程的主函数不在函数符号表中,则在编译参数中增加预设参数以使在所述函数符号列表中具有所述子进程的主函数;
通过预先加载方式加载预设动态链接;
在动态链接库中执行预设逻辑运算对所述子进程的主函数进行钩子处理,以使在所述动态链接库中通过钩子函数调用所述子进程的主函数;
在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息;
对所述请求信息进行解析获取处理参数;
通过所述钩子函数将所述处理参数发送给所述子进程的主函数;
通过所述钩子函数获取所述主函数根据所述处理参数进行处理生成的处理结果;
将所述处理结果通过所述预设通信方式发送给所述父进程。
2.如权利要求1所述的方法,其特征在,所述调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息,包括:
获取父进程发送的通信标识;
根据所述通信标识确定通信方式;
所述钩子函数通过所述通信方式接收父进程发送的请求信息;其中,所述通信方式为管道、共享内存和网络中的一种或者多种。
3.如权利要求1所述的方法,其特征在,还包括:
若通过所述动态链接库中的钩子函数接收到所述父进程发送的退出指令,则进行退出操作;
若通过所述动态链接库中钩子函数没有接收到所述父进程发送的退出指令,则继续将处理参数转发给所述子进程的主函数。
4.一种多进程管理装置,其特征在于,包括:
判断模块,用于判断子进程的主函数是否在函数符号列表中;
增加模块,用于若子进程的主函数不在函数符号表中,则在编译参数中增加预设参数以使在所述函数符号列表中具有所述子进程的主函数;
加载模块,用于通过预先加载方式加载预设动态链接;
执行模块,用于在动态链接库中执行预设逻辑运算对所述子进程的主函数进行钩子处理,以使在所述动态链接库中通过钩子函数调用所述子进程的主函数;
调用模块,用于在监测到父进程发送请求信息时,调用子进程的预设动态链接库中的钩子函数通过预设通信方式接收所述父进程发送的请求信息;
解析模块,用于对所述请求信息进行解析获取处理参数;
第一发送模块,用于通过所述钩子函数将所述处理参数发送给所述子进程的主函数;
处理模块,用于通过所述钩子函数获取所述主函数根据所述处理参数进行处理生成的处理结果;
第二发送模块,用于将所述处理结果通过所述预设通信方式发送给所述父进程。
5.如权利要求4所述的装置,其特征在,所述调用模块,具体用于:
获取父进程发送的通信标识;
根据所述通信标识确定通信方式;
所述钩子函数通过所述通信方式接收父进程发送的请求信息;其中,所述通信方式为管道、共享内存和网络中的一种或者多种。
6.如权利要求4所述的装置,其特征在,还包括:
退出模块,用于若通过所述动态链接库中的钩子函数接收到所述父进程发送的退出指令,则进行退出操作;
所述第一发送模块,还用于若通过所述动态链接库中钩子函数没有接收到所述父进程发送的退出指令,则继续将处理参数转发给所述子进程的主函数。
7.一种计算机设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-3任一所述的多进程管理方法。
8.一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-3任一所述的多进程管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910663207.XA CN112256339B (zh) | 2019-07-22 | 2019-07-22 | 多进程管理方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910663207.XA CN112256339B (zh) | 2019-07-22 | 2019-07-22 | 多进程管理方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112256339A CN112256339A (zh) | 2021-01-22 |
CN112256339B true CN112256339B (zh) | 2023-11-03 |
Family
ID=74223994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910663207.XA Active CN112256339B (zh) | 2019-07-22 | 2019-07-22 | 多进程管理方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112256339B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799763A (zh) * | 2021-01-28 | 2021-05-14 | 深圳希施玛数据科技有限公司 | 一种函数管理方法、管理装置、终端设备及可读存储介质 |
CN113301049B (zh) * | 2021-05-26 | 2023-02-24 | 杭州安恒信息技术股份有限公司 | 一种工控设备的审计方法、装置、设备及可读存储介质 |
CN114465952B (zh) * | 2022-01-20 | 2023-12-01 | 绿盟科技集团股份有限公司 | 一种配置参数的管理方法、装置及电子设备 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5455945A (en) * | 1993-05-19 | 1995-10-03 | Vanderdrift; Richard | System and method for dynamically displaying entering, and updating data from a database |
CN1668015A (zh) * | 2004-12-20 | 2005-09-14 | 华中科技大学 | 基于协同入侵检测的大规模网络安全防御系统 |
JP2013114359A (ja) * | 2011-11-25 | 2013-06-10 | Hitachi Ltd | 計算機システム、および、監視方法 |
CN104156662A (zh) * | 2014-08-28 | 2014-11-19 | 北京奇虎科技有限公司 | 进程监控的方法、装置和智能终端 |
CN105337755A (zh) * | 2014-08-08 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 主从架构服务器及其处理业务的方法和处理业务的系统 |
CN105373729A (zh) * | 2015-12-24 | 2016-03-02 | 北京奇虎科技有限公司 | 一种信息处理方法和系统 |
WO2016086765A1 (zh) * | 2014-12-05 | 2016-06-09 | 北京奇虎科技有限公司 | 浏览器防注入方法、浏览器客户端和装置 |
CN106371899A (zh) * | 2015-07-22 | 2017-02-01 | 无锡天脉聚源传媒科技有限公司 | 一种线程参数的处理方法及装置 |
CN107292165A (zh) * | 2016-03-30 | 2017-10-24 | 无锡天脉聚源传媒科技有限公司 | 一种函数处理方法及装置 |
WO2018099292A1 (zh) * | 2016-11-29 | 2018-06-07 | 阿里巴巴集团控股有限公司 | 一种进程管理方法及装置 |
CN108241496A (zh) * | 2016-12-23 | 2018-07-03 | 北京奇虎科技有限公司 | 应用程序的平滑升级方法及装置 |
CN108595218A (zh) * | 2018-04-17 | 2018-09-28 | 网宿科技股份有限公司 | 一种加载系统动态库的方法和装置 |
CN108830590A (zh) * | 2018-05-28 | 2018-11-16 | 银盒达信息技术(深圳)有限公司 | 一种信息的获取方法、信息的获取装置及终端设备 |
CN109828916A (zh) * | 2018-12-29 | 2019-05-31 | 航天信息股份有限公司 | 一种解决内存泄漏的方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3942098B2 (ja) * | 2003-11-10 | 2007-07-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 情報処理システム、情報登録用情報処理装置、情報検索用情報処理装置、情報登録用情報処理方法、情報検索用情報処理方法、プログラム、及び記録媒体 |
EP3069254B1 (en) * | 2013-11-12 | 2020-07-29 | RunSafe Security, Inc. | Improved control flow integrity system and method |
-
2019
- 2019-07-22 CN CN201910663207.XA patent/CN112256339B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5455945A (en) * | 1993-05-19 | 1995-10-03 | Vanderdrift; Richard | System and method for dynamically displaying entering, and updating data from a database |
CN1668015A (zh) * | 2004-12-20 | 2005-09-14 | 华中科技大学 | 基于协同入侵检测的大规模网络安全防御系统 |
JP2013114359A (ja) * | 2011-11-25 | 2013-06-10 | Hitachi Ltd | 計算機システム、および、監視方法 |
CN105337755A (zh) * | 2014-08-08 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 主从架构服务器及其处理业务的方法和处理业务的系统 |
CN104156662A (zh) * | 2014-08-28 | 2014-11-19 | 北京奇虎科技有限公司 | 进程监控的方法、装置和智能终端 |
WO2016086765A1 (zh) * | 2014-12-05 | 2016-06-09 | 北京奇虎科技有限公司 | 浏览器防注入方法、浏览器客户端和装置 |
CN106371899A (zh) * | 2015-07-22 | 2017-02-01 | 无锡天脉聚源传媒科技有限公司 | 一种线程参数的处理方法及装置 |
CN105373729A (zh) * | 2015-12-24 | 2016-03-02 | 北京奇虎科技有限公司 | 一种信息处理方法和系统 |
CN107292165A (zh) * | 2016-03-30 | 2017-10-24 | 无锡天脉聚源传媒科技有限公司 | 一种函数处理方法及装置 |
WO2018099292A1 (zh) * | 2016-11-29 | 2018-06-07 | 阿里巴巴集团控股有限公司 | 一种进程管理方法及装置 |
CN108241496A (zh) * | 2016-12-23 | 2018-07-03 | 北京奇虎科技有限公司 | 应用程序的平滑升级方法及装置 |
CN108595218A (zh) * | 2018-04-17 | 2018-09-28 | 网宿科技股份有限公司 | 一种加载系统动态库的方法和装置 |
CN108830590A (zh) * | 2018-05-28 | 2018-11-16 | 银盒达信息技术(深圳)有限公司 | 一种信息的获取方法、信息的获取装置及终端设备 |
CN109828916A (zh) * | 2018-12-29 | 2019-05-31 | 航天信息股份有限公司 | 一种解决内存泄漏的方法和系统 |
Non-Patent Citations (1)
Title |
---|
"基于进程切换的任务性能测试内核插桩研究";王辉等;《计算机与数字工程》;190-193 * |
Also Published As
Publication number | Publication date |
---|---|
CN112256339A (zh) | 2021-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112256339B (zh) | 多进程管理方法、装置、电子设备和存储介质 | |
CN109271331A (zh) | 日志的生成方法、装置、计算机设备及存储介质 | |
CN109462726B (zh) | 摄像头的控制方法和装置 | |
US9497096B2 (en) | Dynamic control over tracing of messages received by a message broker | |
CN110309029A (zh) | 异常数据的采集方法、装置、计算机设备和存储介质 | |
CN107168789B (zh) | 多任务的串行调度方法以及装置 | |
CA2904253C (en) | Computer system using in-service software upgrade | |
CN107908488B (zh) | 消息请求接口交互方法、装置、计算机设备及存储介质 | |
CN111782530B (zh) | 一种远程调试方法、装置、系统、电子设备及存储介质 | |
CN113382056A (zh) | 数据上报方法、装置、设备、存储介质及系统 | |
CN113626211A (zh) | 消息队列的切换方法、切换系统、电子设备及存储介质 | |
CN112650556A (zh) | 车辆的多任务并发测试方法及装置 | |
CN111552606A (zh) | 数据处理方法、装置及电子设备 | |
CN106230878B (zh) | 一种基于AllJoyn框架的设备服务调用方法及装置 | |
CN114663063A (zh) | 工作流引擎的实现方法、装置和设备及存储介质 | |
CN114816866A (zh) | 故障处理方法、装置、电子设备和存储介质 | |
CN113778511A (zh) | 资源配置方法、装置、设备及存储介质 | |
CN108874569B (zh) | 事件响应及文件生成的方法、装置及电子设备 | |
CN113127096A (zh) | 任务处理方法和装置、电子设备、存储介质 | |
CN109101513B (zh) | 一种集成多种图片库的方法、存储介质、设备及系统 | |
CN101964922B (zh) | 异常情况捕捉方法及装置 | |
CN113312202B (zh) | 基于组件的故障处理逻辑生成方法、装置、设备和介质 | |
CN117041172B (zh) | 一种白盒交换机接口请求处理方法和装置 | |
CN117272284B (zh) | 应用程序的管控系统、方法、应用服务器及介质 | |
CN111694671B (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 |