多进程管理方法、存储介质、电子设备及系统与流程

文档序号:16390219发布日期:2018-12-22 11:19阅读:232来源:国知局
多进程管理方法、存储介质、电子设备及系统与流程

本发明涉及控制技术领域,具体涉及一种多进程管理方法、存储介质、电子设备及系统。

背景技术

当前,对于一些服务类型的应用程序,特别是对于具有独立任务的应用程序,通常会采用多进程的架构设计,采用多进程的设计,可以使得一个进程的不稳定不会导致整个程序出错,即对于一个服务型的应用程序,当一个进程因为奔溃退出时,其它进程还可以继续进行服务,多进程具有更强的健壮性,以此来保证应用程序的正常运行。

在实际的运行过程中,例如可以创建一个主进程用于接收任务,然后通过主进程创建多个辅助进程(子进程)来完成不同任务,即对于每一个所接收的任务,都由一个辅助进程来完成,即不同的任务创建不同的辅助进程来完成,例如搜索文件任务、写文件任务、图片处理任务等。实际运行中并不能保障每个辅助进程都能稳定运行,由于同时运行的辅助进程过多,有的辅助进程的任务可能执行到一半时产生了数据错误,导致应用程序奔溃,有的辅助进程执行的任务可能会产生死锁导致应用程序卡死,现有技术中主进程对于辅助进程并没有很好的管理方案。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种多进程管理方法,主进程通过命名管道对辅助进程的任务执行状态进行掌控,保证多辅助进程运行情况下应用程序的正常运行。

为达到以上目的,本发明采取的技术方案是,包括:

调用windows系统api函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程;

主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程;

辅助进程调用函数readfile从命名管道中读取任务数据;

辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。

在上述技术方案的基础上,

每个辅助进程对应执行一个任务;

所述命名管道创建时还需传入名称参数;

传入命名管道中的名称参数为该命名管道对应辅助进程所待执行任务的名称。

在上述技术方案的基础上,当命名管道创建完成后,对于主进程:

调用函数connectnamedpipe等待该命名管道对应的辅助进程连接;

待辅助进程通过命名管道完成与主进程的连接,接收辅助进程通过命名管道发送用于表示连接成功的数据至主进程;

调用函数readfile对辅助进程发送的数据进行读取;

调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程。

在上述技术方案的基础上,当命名管道创建完成后,对于辅助进程:

调用函数createfile连接命名管道,完成与主进程间的连接;

发送用于表示连接成功的数据至主进程,然后调用函数waitnamedpipe等待主进程的相应;

调用函数readfile从命名管道中读取主进程写入的任务数据。

在上述技术方案的基础上,所述主进程中预设有任务完成时间,当主进程在命名管道中写入任务数据,并将写入的任务数据发至辅助进程后,若在预设有的任务完成时间内,主进程未收到辅助进程发送的用于表示任务已执行完毕且辅助进程已退出的数据,则主进程调用函数terminateprocess终止该辅助进程的运行。

在上述技术方案的基础上,该方法还包括:编写用于监控辅助进程的异常处理函数,并完成异常处理函数在windows系统中的注册,当辅助进程执行任务出现异常时,异常处理函数通过发送日志告知主进程,主进程调用函数terminateprocess终止该辅助进程的运行。

在上述技术方案的基础上,当辅助进程被终止运行后,主进程重新创建辅助进程来重新执行被终止辅助进程之前执行的任务。

本发明还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

调用windows系统api函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程;

主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程;

辅助进程调用函数readfile从命名管道中读取任务数据;

辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。

本发明还提供一种电子设备,其包括:

创建单元,其用于调用windows系统api函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程;

写入单元,其用于驱使主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程;

读取单元,其用于驱使辅助进程调用函数readfile从命名管道中读取任务数据;

执行及通知单元,其用于驱使辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。

本发明还提供一种多进程管理系统,包括:

创建模块,其用于调用windows系统api函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程;

写入模块,其用于驱使主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程;

读取模块,其用于驱使辅助进程调用函数readfile从命名管道中读取任务数据;

执行及通知模块,其用于驱使辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。

与现有技术相比,本发明的优点在于:通过创建用于主进程和辅助进程间通信的命名管道,然后主进程在创建的命名管道写入任务数据,任务数据通过命名管道发送至辅助进程,辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程,辅助进程和主进程间通过创建的命名管道进行通信,同时主进程通过命名管道对辅助进程的任务执行状态进行掌握,保证多辅助进程运行情况下应用程序的正常运行。

附图说明

图1为本发明实施例中一种多进程管理方法的流程图;

图2为本发明实施例中一种电子设备的结构示意图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

参见图1所示,本发明实施例提供一种多进程管理方法,用于windows系统中运行的应用程序的主进程对辅助进程(子进程)进行管理,当然,本发明实施例中多进程管理方法思路同样也能够应用于linux系统上。本发明实施例的多进程管理方法具体包括以下步骤:

s1:调用windows系统api(applicationprogramminginterface)函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程。在windows系统中,createnamedpipe函数用于进行命名管道的创建。命名管道,又叫命名管线,可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信,属于一种进程间通信机制,本发明实施例通过命名管道来完成应用程序中主进程和辅助进程间的通信,命名管道能够屏蔽底层的网络协议细节,因此使用起来更加方便和快捷。

应用程序在运行的过程中需要执行多个任务,如搜索文件任务、写文件任务、图片处理任务等,每个任务相应由一个辅助进程进行执行,即每个辅助进程对应执行一个任务,所有可能有多个辅助进程同时在进行任务的执行,故创建多个命名管道,每个辅助进程使用一个命名管道与主进程间进行通信。

命名管道创建时还需传入名称参数,即向函数createnamedpipe中传入名称参数,传入命名管道中的名称参数为该命名管道对应辅助进程所待执行任务的名称,由于每个任务的名称是不同的,这样可以保证创建每个命名管道的名称是唯一的,不会与其它命名管道重名,进一步保证命名管道、任务和辅助进程之间对应关系的唯一性。

s2:主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程,由于命名管道和辅助进程是对应的,任务和辅助进程之间是对应的,故主进程在命名管道中写入的任务数据能够通过命名管道发送至对应的辅助进程,任务数据为辅助进程待执行的任务,如写入文件、读取文件等。函数writefile是windows系统中常见的写入数据函数,常用于将数据写入文件中,该函数也常用于对通信设备、管道、套接字以及邮槽的处理。

对于主进程,当命名管道创建完成后,其具体执行的操作如下:

a:调用函数connectnamedpipe等待该命名管道对应的辅助进程连接,当命名管道创建完成后,辅助进程会通过创建的命名管道与主进程连接,在连接之前,主进程调用函数connectnamedpipe等待辅助进程的连接。函数connectnamedpipe在windows系统中用于指示服务器后进程等待,直至客户机或其它进程同命名管道连接。

b:待辅助进程通过命名管道完成与主进程的连接,接收辅助进程通过命名管道发送用于表示连接成功的数据至主进程。即辅助进程连接命名管道后,辅助进程会发送数据告知主进程。

c:调用函数readfile对辅助进程发送的数据进行读取。主进程调用函数readfile对辅助进程发送的数据进行读取,得知辅助进程已连接命名管道成功。函数readfile用于表示将数据读取到一个文件中,即表示进行数据的读取。

d:调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程。由于不同的辅助进程所需执行的任务是不同的,故对于不同的辅助进程,主进程所写入的任务数据是不同的。函数writefile为windows系统中的常见写入数据函数,即将数据写入到一个文件中。

对于辅助进程,当命名管道创建完成后,其具体执行的操作如下:

a:调用函数createfile连接命名管道,完成与主进程间的连接。当命名管道创建完成后,辅助进程调用函数createfile完成辅助进程和命名管道的连接,即完成辅助进程和主进程之间的连接。函数createfile为windows系统中的一个多功能函数,可用于打开或创建对象,,并返回可访问的句柄。

b:待辅助进程通过命名管道完成与主进程的连接,接收辅助进程通过命名管道发送用于表示连接成功的数据至主进程。即告知主进程,辅助进程已完成了连接。主进程得到通知后,给辅助进程下发任务。

c:调用函数readfile对辅助进程发送的数据进行读取。

s3:辅助进程调用函数readfile从命名管道中读取任务数据。主进程得到辅助进程已连接的通知后,会通过命名管道给辅助进程下发任务数据,此时辅助进程调用函数readfile对辅助进程下发的数据进行读取,获知任务内容。

s4:辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。函数atexit为windows系统的api函数,用于终止函数或进程的运行,该函数的原型为intatexit(void(*func)(void)),其中参数func表示进程或程序退出时需要完成的功能,本发明实施例中是指完成任务的执行。

对每个辅助进程均编写了进程退出的注册机制,当辅助进程任务执行完毕,则调用函数atexit完成辅助进程的退出,并发送数据告知主进程任务已执行完毕且辅助进程已退出。

通过编写一个进程间通信的功能来用于辅助进程对主进程的通知数据的发送,告知主进程任务已执行完毕且辅助进程已退出。进程间的通信可以使用系统提供的很多方法进行,如网络socket、进程间的共享内存等。本发明实施例使用之前创建的命名管道来进行辅助进程和主进程之间的通信,此时辅助进程告知主进程任务执行完毕且辅助进程已退出,相应的执行代码为:

writefile(“processexit”);

}

atexit(ipcexit);

即调用之前的函数atexit来注册进程退出函数ipcexit,进程退出函数ipcexit通过命名管道告知主进程。

在一种实时方式中,主进程中预设有任务完成时间,当主进程在命名管道中写入任务数据,并将写入的任务数据发至辅助进程后,若在预设有的任务完成时间内,主进程未收到辅助进程发送的用于表示任务已执行完毕且辅助进程已退出的数据,则主进程调用函数terminateprocess终止该辅助进程的运行。函数terminateprocess是c++编程语言中的一种函数,用于终止指定进程或所有线程。

对于每一个任务均能够提前预估出该任务完成的大致时间,预估出的任务完成时间即为预设在主进程中任务完成时间,当主进程在命名管道中写入任务数据,此时主进程会存储任务的创建时刻,然后主进程周期性对接收的辅助进程发送的数据进行便利,若在预设有的任务完成时间内,主进程未收到辅助进程发送的用于表示任务已执行完毕且辅助进程已退出的数据,即辅助进程执行任务的时间已超过预设的任务完成时间,说明该辅助进程可能发生了卡死的情况,未能正常进行任务的执行,故此时调用函数terminateprocess终止该辅助进程的运行,防止大量卡死的进程持续存在造成系统资源的浪费,保证应用程序的正常运行。

函数terminateprocess的原型如下:

boolterminateprocess(

handlehprocess;//将被结束进程的句柄

uintuexitcode;//指定进程的退出码

);

其中,进程句柄handle则是主进程在创建辅助进程时保存的句柄。当监控到辅助进程卡死的情况时,调用函数terminateprocess关闭该进程,有效防止大量卡死的进程耗尽系统资源。

在一种实施方式中,编写用于监控辅助进程的异常处理函数,并完成异常处理函数在windows系统中的注册,当辅助进程执行任务出现异常时,异常处理函数通过发送日志告知主进程,主进程调用函数terminateprocess终止该辅助进程的运行。异常为除0异常、无效句柄异常、内存访问异常等。对于辅助进程来说,其执行不同的任务,很难保障其执行的所有任务都能够正常的执行,所以对于应用程序的设计来说,则需要能够兼容辅助进程出现错误的情况,当出现错误时,能够捕捉到这种错误,从而及时的通知主进程该任务执行失败。

首先编写一个异常处理逻辑,具体实现如下:

long__stdcall

myunhandledexceptionfilter(pexception_pointers

pexceptioninfo)

即编写一个异常处理函数,该异常处理函数为myunhandledexceptionfilter,其中参数pexceptioninfo用于传递一些异常相关的信息,如此时是什么异常。在异常处理函数中,需要调用之前创建的命名管道来通知主进程,使主进程获知辅助进程出现了异常。

编写好异常处理函数后,然后编写注册异常处理函数的功能。windows系统也提供了相应的api函数来完成异常的注册:首先注册异常处理函数,使得当应用程序的进程执行产生异常时,编写的异常处理逻辑才会被执行。系统提供了相应的api函数来注册异常处理函数,具体实现如下:

setunhandledexceptionfilter(myunhandledexceptionfilter);

其中系统api函数setunhandledexceptionfilter表示用来注册一个异常处理函数,参数myunhandledexceptionfilter是上述编写的异常处理函数。

当异常处理函数注册完成后,即在windows系统中注册了异常处理逻辑,当应用程序执行时产生了异常,则系统会去执行注册的异常处理函数myunhandledexceptionfilter,并在该函数中对异常进行处理。

当辅助进程被终止运行后,主进程重新创建辅助进程来重新执行被终止辅助进程之前执行的任务,保证任务的继续执行,应用程序的正常运行。

本发明实施例的多进程管理方法,通过创建用于主进程和辅助进程间通信的命名管道,然后主进程在创建的命名管道写入任务数据,任务数据通过命名管道发送至辅助进程,辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程,辅助进程和主进程间通过创建的命名管道进行通信,同时主进程通过命名管道对辅助进程的任务执行状态进行掌握,保证多辅助进程运行情况下应用程序的正常运行。

本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

调用windows系统api函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程;

主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程;

辅助进程调用函数readfile从命名管道中读取任务数据;

辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。

参见图2所示,本发明实施例还提供一种电子设备,包括创建单元501、写入单元502、读取单元503和执行及通知单元504。

创建单元501用于调用windows系统api函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程;写入单元502用于驱使主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程;读取单元503用于驱使辅助进程调用函数readfile从命名管道中读取任务数据;执行及通知单元504用于驱使辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。

本发明实施例还提供多进程管理系统,包括创建模块、写入模块、读取模块和执行及通知模块。

创建模块用于调用windows系统api函数中的createnamedpipe函数创建多个用于主进程和辅助进程间通信的命名管道,且每个命名管道对应一个辅助进程;

写入模块用于驱使主进程调用函数writefile在命名管道中写入任务数据,并将写入的任务数据发至对应的辅助进程;

读取模块用于驱使辅助进程调用函数readfile从命名管道中读取任务数据;

执行及通知模块用于驱使辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程。

本发明实施例的多进程管理系统,通过创建用于主进程和辅助进程间通信的命名管道,然后主进程在创建的命名管道写入任务数据,任务数据通过命名管道发送至辅助进程,辅助进程基于任务数据进行相应任务的执行,且待任务执行完毕后,辅助进程调用函数atexit完成自身的退出,并通过命名管道发送用于表示任务已执行完毕且辅助进程已退出的数据至主进程,辅助进程和主进程间通过创建的命名管道进行通信,同时主进程通过命名管道对辅助进程的任务执行状态进行掌握,保证多辅助进程运行情况下应用程序的正常运行。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1