应用程序的平滑升级方法及装置与流程

文档序号:14860222发布日期:2018-07-04 06:45阅读:211来源:国知局
应用程序的平滑升级方法及装置与流程

本发明涉及程序开发技术领域,特别是涉及一种应用程序的平滑升级方法及装置。



背景技术:

编译型语言开发的程序需要编译成可执行的程序文件,然后执行程序文件来启动程序进程,进程是程序执行中的实例,当程序的所有指令执行完毕后进程会退出。当程序源代码有更新时,需要编译成新的可执行文件,并启动新的进程。

现有技术中,服务端程序通常以守护进程的方式启动执行,守护进程是一种在后台持续运行的特殊进程,即,监听一个固定的端口,等待接收、处理和响应客户端发出的请求。正常情况下进程会一直运行,当需要升级程序时,因一个端口同一时间只能被一个进程直接监听,因此需要先关闭老程序执行中的进程,然后再执行新程序启动新的进程,以实现程序的升级。显然,在上述先关闭运行中的进程再启动新进程而升级程序的过程中,存在一段时间没有进程可以处理客户端的请求,从而影响用户的网络使用体验,尤其是对于访问量较大的面向用户的产品,更容易因中断服务而给用户带来不便。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的应用程序的平滑升级方法及装置。

依据本发明的一个方面,提供了一种应用程序的平滑升级方法,包括:

当正在运行的父进程接收对其对应的应用程序的平滑升级指令时,获取所述平滑升级指令中携带的预先编译的、所述应用程序升级后的可执行文件的位置信息;

所述父进程根据所述平滑升级指令继续保持运行状态,并根据所述位置信息调取所述可执行文件并运行,以创建所述父进程的子进程;

所述父进程获取当前运行的运行参数,并将所述运行参数传递至所述子进程,以使所述子进程根据所述运行参数创建匹配的运行环境;

所述子进程根据所述运行参数创建运行环境,并在所述运行环境下处理新的客户端请求,以及向所述父进程发送退出指令;

所述父进程根据接收到的所述退出指令执行退出操作,完成所述应用程序的平滑升级。

可选地,所述父进程根据所述位置信息调取所述可执行文件并运行,包括:

所述父进程调用fork函数,并利用所述fork函数创建新的子进程;

利用所述新的子进程读取所述位置信息指向的可执行文件,并运行所述读取到的可执行文件。

可选地,所述运行参数包括所述父进程所监听的指定端口和/或运行资源的文件描述符,所述运行资源包括文本段、数据段、栈、堆中的至少一项。

可选地,所述子进程根据所述运行参数创建运行环境,包括:

所述子进程继承所述父进程所传递的文件描述符;

确定所述文件描述符指向的指定端口;

创建所述子进程与所述指定端口之间的监听关系,以使所述子进程能够在所述监听关系下监听所述指定端口。

可选地,所述父进程根据接收到的所述退出指令执行退出操作,包括:

所述父进程停止接收新的客户端请求,并判断当前是否有未处理完成的客户端请求;

若是,则继续处理所述未完成的客户端请求,并在处理完成后执行退出操作;

若否,则直接执行退出操作。

可选地,所述平滑升级指令包括用于触发所述父进程启动平滑升级操作的sigusr信号。

可选地,所述子进程在所述运行环境下处理新的客户端请求,包括:

所述子进程监听所述指定端口;

当监听到所述指定端口接收到新的客户端请求时,通过所述指定端口接收所述新的客户端请求;

处理并响应所述接收到的客户端请求。

可选地,完成所述应用程序的平滑升级之后,所述方法还包括:

当前操作系统的根进程领养所述子进程,使所述子进程在所述根进程下处理所述新的客户端请求,成为守护进程。

依据本发明的另一个方面,提供了一种应用程序的平滑升级装置,包括:

获取模块,适于当正在运行的父进程接收对其对应的应用程序的平滑升级指令时,获取所述平滑升级指令中携带的预先编译的、所述应用程序升级后的可执行文件的位置信息;

父进程执行模块,适于根据所述平滑升级指令继续保持运行状态,并根据所述位置信息调取所述可执行文件并运行,以创建所述父进程的子进程;

所述父进程执行模块,还适于获取当前运行的运行参数,并将所述运行参数传递至所述子进程,以使所述子进程根据所述运行参数创建匹配的运行环境;

子进程执行模块,适于根据所述运行参数创建运行环境,并在所述运行环境下处理新的客户端请求,以及向所述父进程发送退出指令;

所述父进程执行模块,还适于根据接收到的所述退出指令执行退出操作,完成所述应用程序的平滑升级。

可选地,所述父进程执行模块还适于:

调用fork函数,并利用所述fork函数创建新的子进程;

利用所述新的子进程读取所述位置信息指向的可执行文件,并运行所述读取到的可执行文件。

可选地,所述运行参数包括所述父进程所监听的指定端口和/或运行资源的文件描述符,所述运行资源包括文本段、数据段、栈、堆中的至少一项。

可选地,所述子进程执行模块还适于:

继承所述父进程所传递的文件描述符;

确定所述文件描述符指向的指定端口;

创建所述子进程与所述指定端口之间的监听关系,以使所述子进程能够在所述监听关系下监听所述指定端口。

可选地,所述父进程执行模块还适于:

停止接收新的客户端请求,并判断当前是否有未处理完成的客户端请求;

若是,则继续处理所述未完成的客户端请求,并在处理完成后执行退出操作;

若否,则直接执行退出操作。

可选地,所述平滑升级指令包括用于触发所述父进程启动平滑升级操作的sigusr信号。

可选地,所述子进程执行模块还适于:

监听所述指定端口;

当监听到所述指定端口接收到新的客户端请求时,通过所述指定端口接收所述新的客户端请求;

处理并响应所述接收到的客户端请求。

可选地,所述装置还包括:

领养模块,适于当前操作系统的根进程领养所述子进程,使所述子进程在所述根进程下处理所述新的客户端请求,成为守护进程。

采用本发明实施例提供的技术方案,在对应用程序进行升级时,正在运行的父进程能够获取平滑升级指令中携带的预先编译的应用程序升级后的可执行文件的位置信息,并继续保持父进程的运行状态,同时根据执行文件的位置信息调取可执行文件并运行,以创建父进程的子进程,然后父进程将当前运行的运行参数传递至子进程,使得子进程能够根据该运行参数创建匹配的运行环境,并在所创建的运行环境下处理新的客户端请求,同时向父进程发送退出指令,使得父进程能够执行退出操作,最终完成应用程序的平滑升级。可见,该技术方案在升级应用程序的过程中,即使只有一个监听端口,也无需关闭正在运行的父进程,而是以父子进程的运行状态的更替来实现应用程序的平滑升级,从而避免了因关闭父进程后导致中间一段时间没有进程可以处理客户端请求的问题,使得客户端发送的请求自始至终都能够被很好地处理,因而提高了用户在网络使用中的体验度。

进一步地,本发明实施例中,当父进程根据接收到的退出指令执行退出操作时,还能够判断当前是否有未处理完成的客户端请求,若是,则父进程继续处理未完成的客户端请求,并在处理完成后执行退出操作,从而使得未处理完成的客户端请求不会因应用程序的升级而中断,避免了中断处理客户端请求给用户带来的不便。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是根据本发明一个实施例的一种应用程序的平滑升级方法的示意性流程图;

图2是根据本发明一个具体实施例的一种应用程序的平滑升级方法的示意性流程图;

图3是根据本发明一个实施例的一种应用程序的平滑升级装置的示意性框图;

图4是根据本发明另一个实施例的一种应用程序的平滑升级装置的示意性框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1是根据本发明一个实施例的一种应用程序的平滑升级方法的示意性流程图。如图1所示,该方法一般性地可包括以下步骤s101-s105:

步骤s101,当正在运行的父进程接收对其对应的应用程序的平滑升级指令时,获取平滑升级指令中携带的预先编译的、应用程序升级后的可执行文件的位置信息。

步骤s102,父进程根据平滑升级指令继续保持运行状态,并根据位置信息调取可执行文件并运行,以创建父进程的子进程。

步骤s103,父进程获取当前运行的运行参数,并将运行参数传递至子进程,以使子进程根据运行参数创建匹配的运行环境。

步骤s104,子进程根据运行参数创建运行环境,并在运行环境下处理新的客户端请求,以及向父进程发送退出指令。

步骤s105,父进程根据接收到的退出指令执行退出操作,完成应用程序的平滑升级。

采用本发明实施例提供的技术方案,在对应用程序进行升级时,正在运行的父进程能够获取平滑升级指令中携带的预先编译的应用程序升级后的可执行文件的位置信息,并继续保持父进程的运行状态,同时根据执行文件的位置信息调取可执行文件并运行,以创建父进程的子进程,然后父进程将当前运行的运行参数传递至子进程,使得子进程能够根据该运行参数创建匹配的运行环境,并在所创建的运行环境下处理新的客户端请求,同时向父进程发送退出指令,使得父进程能够执行退出操作,最终完成应用程序的平滑升级。可见,该技术方案在升级应用程序的过程中,即使只有一个监听端口,也无需关闭正在运行的父进程,而是以父子进程的运行状态的更替来实现应用程序的平滑升级,从而避免了因关闭父进程后导致中间一段时间没有进程可以处理客户端请求的问题,使得客户端发送的请求自始至终都能够被很好地处理,因而提高了用户在网络使用中的体验度。

以下针对上述步骤s101-s105进行详细说明。

首先执行步骤s101,即当正在运行的父进程接收对其对应的应用程序的平滑升级指令时,获取平滑升级指令中携带的预先编译的、应用程序升级后的可执行文件的位置信息。其中,父进程即为应用程序升级之前正在运行的原进程。平滑升级指令可包括用于触发父进程启动平滑升级操作的sigusr信号,例如sigusr1或者sigusr2信号。当然,还可发送其他预先指定的特定信号给父进程,以指示父进程进入平滑升级过程。

然后执行步骤s102,即父进程根据平滑升级指令继续保持运行状态,并根据可执行文件的位置信息调取可执行文件并运行,以创建父进程的子进程。具体地,父进程根据可执行文件的位置信息调取可执行文件时,可首先调用fork函数,并利用fork函数创建新的子进程;其次利用所创建的新的子进程读取可执行文件的位置信息所指向的可执行文件,并运行读取到的可执行文件。其中,fork函数即为计算机程序设计中的分叉函数,fork函数的特征为仅调用一次、但却返回两个值。以下列举fork函数在创建子进程时的基本使用方法:

在父进程中,fork函数返回所创建的子进程的进程id,而在子进程中,fork函数返回0。因此,由上述列举的代码可知,当输出为-1时,表明fork函数运行失败;"pid:%dintheparentprocess\n"中的“%d”表示子进程id,"pid:%dinthechildprocess\n"中的“%d”为0。假设在该实施例中,上述列举的代码的输出结果如下:

:pid:2923intheparentprocess

:pid:0inthechildprocess

从输出结果中可看出,2923为子进程id。

父进程创建子进程之后,继续执行步骤s103,即父进程获取当前运行的运行参数,并将运行参数传递至子进程,以使子进程根据运行参数创建匹配的运行环境。其中,运行参数包括父进程所监听的指定端口和/或运行资源的文件描述符,运行资源包括文本段、数据段、栈、堆中的至少一项。

父进程将运行参数传递至子进程之后,继续执行步骤s104,即子进程根据运行参数创建运行环境,并在运行环境下处理新的客户端请求,以及向父进程发送退出指令。具体地,子进程可按照下述方式创建运行环境:首先,继承父进程所传递的运行资源的文件描述符,其中,运行资源包括文本段、数据段、栈、堆中的至少一项;其次,确定该文件描述符指向的指定端口;再次,创建子进程与该指定端口之间的监听关系,以使子进程能够在监听关系下监听指定端口。其中,指定端口即为父进程/子进程在运行过程中用于监听客户端请求的端口。

当子进程创建运行环境之后,即可在该运行环境下通过指定端口接收新的客户端请求进行处理。在一个实施例中,子进程可按照下述方式处理新的客户端请求:首先,子进程监听用于监听客户端请求的指定端口,其次,当子进程监听到指定端口接收到新的客户端请求时,通过指定端口接收该新的客户端请求;再次,子进程处理并响应接收到的客户端请求。

在子进程创建运行环境、并向父进程发送退出指令之后,继续执行步骤s105,即父进程根据接收到的退出指令执行退出操作,完成应用程序的平滑升级。

在一个实施例中,父进程执行退出操作之前,停止接收新的客户端请求(此时新的客户端请求由子进程接收),并判断当前是否有未处理完成的客户端请求,例如,已由父进程接收但尚未处理完成的(包括尚未处理的和处理一部分的)客户端请求。若当前有未处理完成的客户端请求,则父进程继续处理这些未完成的客户端请求,并在处理完成后执行退出操作;若当前没有未处理完成的客户端请求,则父进程可直接执行退出操作。

该实施例中,当父进程根据接收到的退出指令执行退出操作时,还能够判断当前是否有未处理完成的客户端请求,若是,则父进程继续处理未完成的客户端请求,并在处理完成后执行退出操作,从而使得未处理完成的客户端请求不会因应用程序的升级而中断,避免了中断处理客户端请求给用户带来的不便。

此外,父进程执行退出操作之前,若当前有未处理完成的客户端请求,父进程也可将未处理完成的客户端请求一并传递给子进程,由子进程继续处理这些未完成的客户端请求。

在一个实施例中,完成应用程序的平滑升级之后,上述方法还包括以下步骤:当前操作系统的根进程领养子进程,使子进程在根进程下处理新的客户端请求,成为守护进程。其中,守护进程是一种在后台持续运行的特殊进程,守护进程并不存在任何父进程。由于完成应用程序的平滑升级之后,作为子进程的父进程已执行退出操作,因此此时子进程并不存在父进程,将子进程作为守护进程运行于系统后台,使得子进程可代替先前的父进程成为主进程,并持续在后台接收并处理客户端请求。

以下以一个具体实施例来说明本发明提供的应用程序的平滑升级方法。

在一具体实施例中,以应用程序“360安全卫士”为例来说明应用程序“360安全卫士”的平滑升级过程,如图2所示,该平滑升级方法应用于服务器,包括以下步骤s201-s212:

步骤s201,向当前正在运行的应用程序“360安全卫士”的主进程发送平滑升级指令。具体地,可通过发送sigusr信号(例如sigusr1或者sigusr2信号)来发送平滑升级指令。

步骤s202,主进程获取平滑升级指令中携带的预先编译的、“360安全卫士”升级后的可执行文件的位置信息。其中,可执行文件的位置信息可以是服务器中的指定位置,根据该位置信息,即可获取到“360安全卫士”升级后的可执行文件。

步骤s203,主进程作为父进程调用fork函数,并利用fork函数为其创建新的子进程。

步骤s204,父进程利用所创建的新的子进程读取并运行该位置信息所指向的“360安全卫士”升级后的可执行文件。

步骤s205,父进程获取当前运行的运行参数,并将该运行参数传递至子进程。其中,运行参数包括父进程所监听的指定端口和/或运行资源的文件描述符,运行资源包括文本段、数据段、栈、堆中的至少一项。

步骤s206,子进程接收父进程所传递的运行参数,并集成运行参数中文件描述符所指向的指定端口。

步骤s207,子进程创建子进程与该指定端口之间的监听关系,并在该监听关系下监听指定端口,处理由指定端口接收到的新的客户端请求。

其中,客户端请求例如:利用360安全卫士进行木马查杀、电脑体检、电脑清理、优化加速等请求。

步骤s208,子进程向父进程发送退出指令。

步骤s209,父进程停止接收新的客户端请求,并判断当前是否有未处理完成的客户端请求;若是,则执行步骤s210;若否,则执行步骤s212。

步骤s210,父进程继续处理这些未完成的客户端请求,并在处理完成后执行退出操作。

例如,父进程当前正在为客户端a所在计算机进行系统修复,且修复过程未完成,则父进程继续为客户端a所在计算机进行系统修复,直至该修复过程结束后,父进程再执行退出操作。

步骤s211,当前操作系统的根进程领养子进程,使子进程在根进程下处理新的客户端请求,成为守护进程。

步骤s212,父进程根据退出指令执行退出操作。

由该实施例可看出,在对应用程序“360安全卫士”进行平滑升级的过程中,并不会在子进程开始监听指定端口之前退出父进程,而是以父子进程的运行状态的更替来实现应用程序的平滑升级,从而避免了因关闭父进程后导致中间一段时间没有进程可以处理客户端请求的问题。而现有技术中,则是在接收到对应用程序“360安全卫士”的升级指令时立刻退出正在运行的主进程,那么,在新的进程创建之前,如果客户端发来新的请求,则没有进程可以接收并处理该新的请求,导致客户端用户无法正常使用应用程序“360安全卫士”。再例如,现有技术在立刻退出正在运行的主进程时,假设主进程正在为客户端a所在计算机进行系统修复,那么主进程的退出则会导致该修复过程中断,从而使客户端a无法正常使用应用程序“360安全卫士”进行系统修复。而该实施例中父进程并不会立即退出,而是将当前未处理完成的客户端请求处理完成之后才会退出,从而避免中断处理客户端请求给用户带来的不便。

图3是根据本发明一个实施例的一种应用程序的平滑升级装置的示意性框图。如图3所示,该装置包括获取模块310、父进程执行模块320和子进程执行模块330;其中:

获取模块310,适于当正在运行的父进程接收对其对应的应用程序的平滑升级指令时,获取平滑升级指令中携带的预先编译的、应用程序升级后的可执行文件的位置信息;

父进程执行模块320,与获取模块310相耦合,适于根据平滑升级指令继续保持运行状态,并根据位置信息调取可执行文件并运行,以创建父进程的子进程;

父进程执行模块320,还适于获取当前运行的运行参数,并将运行参数传递至子进程,以使子进程根据运行参数创建匹配的运行环境;

子进程执行模块330,与父进程执行模块320相耦合,适于根据运行参数创建运行环境,并在运行环境下处理新的客户端请求,以及向父进程发送退出指令;

父进程执行模块320,还适于根据接收到的退出指令执行退出操作,完成应用程序的平滑升级。

在一个实施例中,父进程执行模块320还适于:

调用fork函数,并利用fork函数创建新的子进程;

利用新的子进程读取位置信息指向的可执行文件,并运行读取到的可执行文件。

在一个实施例中,运行参数包括父进程所监听的指定端口和/或运行资源的文件描述符,运行资源包括文本段、数据段、栈、堆中的至少一项。

在一个实施例中,子进程执行模块330还适于:

继承父进程所传递的文件描述符;

确定文件描述符指向的指定端口;

创建子进程与指定端口之间的监听关系,以使子进程能够在监听关系下监听指定端口。

在一个实施例中,父进程执行模块320还适于:

停止接收新的客户端请求,并判断当前是否有未处理完成的客户端请求;

若是,则继续处理未完成的客户端请求,并在处理完成后执行退出操作;

若否,则直接执行退出操作。

在一个实施例中,平滑升级指令包括用于触发父进程启动平滑升级操作的sigusr信号。

在一个实施例中,子进程执行模块330还适于:

监听指定端口,

当监听到指定端口接收到新的客户端请求时,通过指定端口接收新的客户端请求;

处理并响应接收到的客户端请求。

在一个实施例中,如图4所示,上述装置还包括:

领养模块340,与父进程执行模块320和子进程执行模块330相耦合,适于当前操作系统的根进程领养子进程,使子进程在根进程下处理新的客户端请求,成为守护进程。

采用本发明实施例提供的装置,在对应用程序进行升级时,正在运行的父进程能够获取平滑升级指令中携带的预先编译的应用程序升级后的可执行文件的位置信息,并继续保持父进程的运行状态,同时根据执行文件的位置信息调取可执行文件并运行,以创建父进程的子进程,然后父进程将当前运行的运行参数传递至子进程,使得子进程能够根据该运行参数创建匹配的运行环境,并在所创建的运行环境下处理新的客户端请求,同时向父进程发送退出指令,使得父进程能够执行退出操作,最终完成应用程序的平滑升级。可见,该技术方案在升级应用程序的过程中,即使只有一个监听端口,也无需关闭正在运行的父进程,而是以父子进程的运行状态的更替来实现应用程序的平滑升级,从而避免了因关闭父进程后导致中间一段时间没有进程可以处理客户端请求的问题,使得客户端发送的请求自始至终都能够被很好地处理,因而提高了用户在网络使用中的体验度。

本领域的技术人员应可理解,图3和图4中的应用程序的平滑升级装置能够用来实现前文所述的应用程序的平滑升级方案,其中的细节描述应与前文方法部分描述类似,为避免繁琐,此处不另赘述。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的应用程序的平滑升级装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。

本发明实施例提供了a1.一种应用程序的平滑升级方法,包括:

当正在运行的父进程接收对其对应的应用程序的平滑升级指令时,获取所述平滑升级指令中携带的预先编译的、所述应用程序升级后的可执行文件的位置信息;

所述父进程根据所述平滑升级指令继续保持运行状态,并根据所述位置信息调取所述可执行文件并运行,以创建所述父进程的子进程;

所述父进程获取当前运行的运行参数,并将所述运行参数传递至所述子进程,以使所述子进程根据所述运行参数创建匹配的运行环境;

所述子进程根据所述运行参数创建运行环境,并在所述运行环境下处理新的客户端请求,以及向所述父进程发送退出指令;

所述父进程根据接收到的所述退出指令执行退出操作,完成所述应用程序的平滑升级。

a2.根据a1所述的方法,其中,所述父进程根据所述位置信息调取所述可执行文件并运行,包括:

所述父进程调用fork函数,并利用所述fork函数创建新的子进程;

利用所述新的子进程读取所述位置信息指向的可执行文件,并运行所述读取到的可执行文件。

a3.根据a1或a2所述的方法,其中,所述运行参数包括所述父进程所监听的指定端口和/或运行资源的文件描述符,所述运行资源包括文本段、数据段、栈、堆中的至少一项。

a4.根据a3所述的方法,其中,所述子进程根据所述运行参数创建运行环境,包括:

所述子进程继承所述父进程所传递的文件描述符;

确定所述文件描述符指向的指定端口;

创建所述子进程与所述指定端口之间的监听关系,以使所述子进程能够在所述监听关系下监听所述指定端口。

a5.根据a1所述的方法,其中,所述父进程根据接收到的所述退出指令执行退出操作,包括:

所述父进程停止接收新的客户端请求,并判断当前是否有未处理完成的客户端请求;

若是,则继续处理所述未完成的客户端请求,并在处理完成后执行退出操作;

若否,则直接执行退出操作。

a6.根据a1所述的方法,其中,所述平滑升级指令包括用于触发所述父进程启动平滑升级操作的sigusr信号。

a7.根据a1所述的方法,其中,所述子进程在所述运行环境下处理新的客户端请求,包括:

所述子进程监听所述指定端口;

当监听到所述指定端口接收到新的客户端请求时,通过所述指定端口接收所述新的客户端请求;

处理并响应所述接收到的客户端请求。

a8.根据a1所述的方法,其中,完成所述应用程序的平滑升级之后,所述方法还包括:

当前操作系统的根进程领养所述子进程,使所述子进程在所述根进程下处理所述新的客户端请求,成为守护进程。

本发明实施例还提供了b9.一种应用程序的平滑升级装置,包括:

获取模块,适于当正在运行的父进程接收对其对应的应用程序的平滑升级指令时,获取所述平滑升级指令中携带的预先编译的、所述应用程序升级后的可执行文件的位置信息;

父进程执行模块,适于根据所述平滑升级指令继续保持运行状态,并根据所述位置信息调取所述可执行文件并运行,以创建所述父进程的子进程;

所述父进程执行模块,还适于获取当前运行的运行参数,并将所述运行参数传递至所述子进程,以使所述子进程根据所述运行参数创建匹配的运行环境;

子进程执行模块,适于根据所述运行参数创建运行环境,并在所述运行环境下处理新的客户端请求,以及向所述父进程发送退出指令;

所述父进程执行模块,还适于根据接收到的所述退出指令执行退出操作,完成所述应用程序的平滑升级。

b10.根据b9所述的装置,其中,所述父进程执行模块还适于:

调用fork函数,并利用所述fork函数创建新的子进程;

利用所述新的子进程读取所述位置信息指向的可执行文件,并运行所述读取到的可执行文件。

b11.根据b9或b10所述的装置,其中,所述运行参数包括所述父进程所监听的指定端口和/或运行资源的文件描述符,所述运行资源包括文本段、数据段、栈、堆中的至少一项。

b12.根据b11所述的装置,其中,所述子进程执行模块还适于:

继承所述父进程所传递的文件描述符;

确定所述文件描述符指向的指定端口;

创建所述子进程与所述指定端口之间的监听关系,以使所述子进程能够在所述监听关系下监听所述指定端口。

b13.根据b9所述的装置,其中,所述父进程执行模块还适于:

停止接收新的客户端请求,并判断当前是否有未处理完成的客户端请求;

若是,则继续处理所述未完成的客户端请求,并在处理完成后执行退出操作;

若否,则直接执行退出操作。

b14.根据b9所述的装置,其中,所述平滑升级指令包括用于触发所述父进程启动平滑升级操作的sigusr信号。

b15.根据b9所述的装置,其中,所述子进程执行模块还适于:

监听所述指定端口;

当监听到所述指定端口接收到新的客户端请求时,通过所述指定端口接收所述新的客户端请求;

处理并响应所述接收到的客户端请求。

b16.根据b9所述的装置,其中,所述装置还包括:

领养模块,适于当前操作系统的根进程领养所述子进程,使所述子进程在所述根进程下处理所述新的客户端请求,成为守护进程。

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