Linux应用进程管理方法及装置

文档序号:1963565 发布日期:2021-12-14 浏览:28次 >En<

阅读说明:本技术 Linux应用进程管理方法及装置 (Linux application process management method and device ) 是由 王哲 于 2021-11-17 设计创作,主要内容包括:本申请提供一种Linux应用进程管理方法及装置,该方法包括:获取目标应用的进程状态变更信息;基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作;其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。(The application provides a method and a device for managing a Linux application process, wherein the method comprises the following steps: acquiring process state change information of a target application; controlling a target process to execute an operation corresponding to the state change information through a target communication connection established with the target process based on the process state change information; wherein the target process is a process in a target control group of the target application; the target communication connection is a communication connection established with the target process when the target process is established.)

Linux应用进程管理方法及装置

技术领域

本申请涉及Linux系统软件开发领域,尤其涉及一种Linux应用进程管理方法及装置。

背景技术

随着移动通信技术的发展,移动设备上的操作系统(例如,Android、iOS等)基于移动设备功耗及资源敏感的考虑,均有对应用的前后台进程的强生命周期管理机制。

然而,面向个人计算机的Linux操作系统,并没有前后台的概念,也没有相应的系统服务框架支持对应用进程生命周期的管理,导致Linux应用缺乏有效的前后台进程管理机制。

发明内容

本申请的目的是提供一种Linux应用进程管理方法及装置,用于增强Linux应用的前后台进程管理。

本申请提供一种Linux应用进程管理方法,包括:

获取目标应用的进程状态变更信息;基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作;其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。

可选地,所述获取目标应用的进程状态变更信息之前,所述方法还包括:获取所述目标应用的启动请求;响应于所述启动请求,创建目标应用进程;在所述目标应用进程创建成功的情况下,创建所述目标控制群组,将所述目标应用进程加入所述目标控制群组,并建立与所述目标应用进程的通信连接;基于所述目标应用进程的当前运行状态,记录所述目标应用进程的状态信息。

可选地,所述基于所述目标应用进程的当前运行状态,记录所述目标应用进程的状态信息之后,所述方法还包括:获取所述目标应用进程的子进程创建成功的消息;建立与所述目标应用进程的子进程间的通信连接;将所述目标应用进程的子进程加入所述目标控制群组;基于所述目标应用进程的子进程的当前运行状态,记录所述目标应用进程的子进程的状态信息。

可选地,所述获取目标应用的进程状态变更信息,包括:获取窗口焦点变更消息;所述基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作,包括:控制获取窗口焦点的进程进入激活状态,并在失去窗口焦点的进程满足预设条件的情况下,通过所述目标通信连接,控制所述失去窗口焦点的进程进入非激活状态;其中,进入非激活状态的进程会关闭部分功能,进入激活状态的进程会重新启用进程进入非激活状态时关闭的功能。

可选地,所述获取目标应用的进程状态变更信息,包括:获取窗口隐藏消息;所述基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作,包括:在第一进程所对应的窗口全部处于隐藏状态的情况下,通过所述目标通信连接,控制所述第一进程进入不可见运行状态;停止渲染所述第一进程的窗口,并在所述第一进程中所有进程均处于不可见运行状态的情况下,降低第一进程组的资源优先级;其中,所述第一进程为:第一窗口所属的进程;所述第一窗口为:所述窗口隐藏消息指示的需要隐藏的窗口;所述第一进程组包括:所述第一进程,和/或,所述第一进程的子进程。

可选地,所述获取目标应用的进程状态变更信息,包括:获取第二进程的挂起消息;所述挂起消息用于指示所述第二进程进入挂起状态;所述基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作,包括:获取所述第二进程的窗口状态信息;在所述窗口状态信息指示所述第二进程所对应的窗口均处于隐藏状态的情况下,通过所述目标通信连接,向所述第二进程发送第一消息;所述第一消息用于通知所述第二进程在第一预设时间内保留目标数据;所述目标数据为所述第二进程恢复时所需的必要数据;当所述第一预设时间结束后,向所述第二进程发送SIGINT消息,控制所述第二进程进入挂起状态;在第二进程组中的所有进程处于不可见运行状态的情况下,控制所述第二进程组中的进程进入挂起状态;其中,所述第二进程组为所述第二进程所属的进程组。

可选地,所述获取目标应用的进程状态变更信息,包括:获取所述第二进程的恢复消息;所述恢复消息用于指示所述第二进程从挂起状态进入正常运行状态;所述基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作,包括:向所述第二进程发送SIGCONT消息;在所述第二进程处于正常运行状态的情况下,通过所述目标通信连接,向所述第二进程发送第二消息,控制所述第二进程基于所述目标数据恢复所述第二进程进入挂起状态前的运行状态;向窗口管理器发送第三消息,恢复所述第二进程对应的窗口。

可选地,所述获取目标应用的进程状态变更信息,包括:所述获取目标应用的进程状态变更信息,包括:获取第三进程的应用停止信息;所述基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作,包括:在所述第三进程处于挂起状态的情况下,向所述第三进程发送SIGCONT消息,控制所述第三进程恢复运行状态;通过所述目标通信连接,向所述第三进程发送第四消息;所述第四消息用于指示所述第三进程在第二预设时间内完成停止前准备工作;当所述第二预设时间结束后,向所述第三进程发送SIGTERM消息;在所述第三进程终止超时的情况下,通过所述目标通信连接,向所述第三进程发送SIGKILL消息;获取所述目标控制群组内与所述第三进程相关联的第四进程的进程状态信息;基于所述第四进程的进程状态信息,按照预设回收策略回收所述第四进程所占用的资源。

本申请还提供一种Linux应用进程管理装置,包括:

获取模块,用于获取目标应用的进程状态变更信息;控制模块,用于基于所述获取模块获取的进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作;其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。

可选地,所述装置还包括:群组管理模块、通信模块和记录模块;所述获取模块,还用于获取所述目标应用的启动请求;群组管理模块,用于响应于所述获取模块获取的启动请求,创建目标应用进程;所述群组管理模块,还用于在所述目标应用进程创建成功的情况下,创建所述目标控制群组,将所述目标应用进程加入所述目标控制群组;所述通信模块,用于建立与所述目标应用进程的通信连接;所述记录模块,用于基于所述目标应用进程的当前运行状态,记录所述目标应用进程的状态信息。

可选地,所述获取模块,还用于获取所述目标应用进程的子进程创建成功的消息;所述通信模块,还用于建立与所述目标应用进程的子进程间的通信连接;所述群组管理模块,用于将所述目标应用进程的子进程加入所述目标控制群组;所述记录模块,还用于基于所述目标应用进程的子进程的当前运行状态,记录所述目标应用进程的子进程的状态信息。

可选地,所述获取模块,具体用于获取窗口焦点变更消息;所述控制模块,具体用于控制获取窗口焦点的进程进入激活状态;所述控制模块,还用于在失去窗口焦点的进程满足预设条件的情况下,通过所述目标通信连接,控制所述失去窗口焦点的进程进入非激活状态;其中,进入非激活状态的进程会关闭部分功能,进入激活状态的进程会重新启用进程进入非激活状态时关闭的功能。

可选地,所述装置还包括,显示模块和资源管理模块;所述获取模块,具体用于获取窗口隐藏消息;所述控制模块,具体用于在第一进程所对应的窗口全部处于隐藏状态的情况下,通过所述目标通信连接,控制所述第一进程进入不可见运行状态;所述显示模块,用于停止渲染所述第一进程的窗口;所述资源管理模块,用于在所述第一进程中所有进程均处于不可见运行状态的情况下,降低第一进程组的资源优先级;其中,所述第一进程为:第一窗口所属的进程;所述第一窗口为:所述窗口隐藏消息指示的需要隐藏的窗口;所述第一进程组包括:所述第一进程,和/或,所述第一进程的子进程。

可选地,所述获取模块,具体用于获取第二进程的挂起消息;所述获取模块,还用于获取所述第二进程的窗口状态信息;所述控制模块,具体用于在所述窗口状态信息指示所述第二进程所对应的窗口均处于隐藏状态的情况下,通过所述目标通信连接,向所述第二进程发送第一消息;所述第一消息用于通知所述第二进程在第一预设时间内保留目标数据;所述目标数据为所述第二进程恢复时所需的必要数据;所述通信模块,具体用于当所述第一预设时间结束后,向所述第二进程发送SIGINT消息;所述控制模块,具体用于控制所述第二进程进入挂起状态;所述控制模块,具体用于在第二进程组中的所有进程处于不可见运行状态的情况下,控制所述第二进程组中的进程进入挂起状态;其中,所述第二进程组为所述第二进程所属的进程组。

可选地,所述获取模块,具体用于获取所述第二进程的恢复消息;所述恢复消息用于指示所述第二进程从挂起状态进入正常运行状态;所述通信模块,还用于向所述第二进程发送SIGCONT消息;所述通信模块,还用于在所述第二进程处于正常运行状态的情况下,通过所述目标通信连接,向所述第二进程发送第二消息;所述控制模块,具体用于控制所述第二进程基于所述目标数据恢复所述第二进程进入挂起状态前的运行状态;所述通信模块,还用于向窗口管理器发送第三消息,恢复所述第二进程对应的窗口。

可选地,所述获取模块,具体用于获取第三进程的应用停止信息;所述通信模块,还用于在所述第三进程处于挂起状态的情况下,向所述第三进程发送SIGCONT消息;所述控制模块,具体用于控制所述第三进程恢复运行状态;所述通信模块,还用于通过所述目标通信连接,向所述第三进程发送第四消息;所述第四消息用于指示所述第三进程在第二预设时间内完成停止前准备工作;所述通信模块,还用于当所述第二预设时间结束后,向所述第三进程发送SIGTERM消息;所述通信模块,还用于在所述第三进程终止超时的情况下,向所述第三进程发送SIGKILL消息;所述获取模块,还用于获取所述目标控制群组内与所述第三进程相关联的第四进程的进程状态信息;所述资源管理模块,还用于基于所述第四进程的进程状态信息,按照预设回收策略回收所述第四进程所占用的资源。

本申请还提供一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现如上述任一种所述Linux应用进程管理方法的步骤。

本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述Linux应用进程管理方法的步骤。

本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述Linux应用进程管理方法的步骤。

本申请提供的Linux应用进程管理方法及装置,通过目标应用的目标控制群组,获取该目标控制群组中每个进程的进程信息,并与之建立通信连接。之后,当系统获取到目标控制群组中目标应用的进程状态变更信息时,基于该进程状态变更信息,通过与目标进程建立的目标通信连接,向该目标进程发送控制信,控制目标进程执行与所述状态变更信息对应的操作,进而实现对目标应用的每个进程整个生命周期的管理。

附图说明

为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请提供的Linux应用进程管理方法的流程示意图;

图2是本申请提供的Linux应用主进程启动流程示意图;

图3是本申请提供的Linux应用的子进程启动流程示意图;

图4是本申请提供的应用进程管理服务控制进程进入非激活运行状态的流程示意图;

图5是本申请提供的应用进程管理服务控制进程进入不可见运行状态的流程示意图;

图6是本申请提供的应用进程管理服务控制进程进入挂起状态的流程示意图;

图7是本申请提供的应用进程管理服务控制进程从挂起状态恢复的流程示意图;

图8是本申请提供的应用进程管理服务控制进程终止的流程示意图;

图9是本申请提供的Linux应用进程管理装置的结构示意图;

图10是本申请提供的电子设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。

移动操作系统(例如,Android、iOS等)由于对硬件资源及功耗敏感,都会有对应用生命周期的强管理机制。例如,前台应用激活,后台应用暂停;在系统资源紧张时,回收部分应用来释放资源。传统Linux操作系统,主要面向个人计算机开发,应用没有前后台概念,对应用也几乎没有运行限制,所以在移动设备上的功耗表现不好。另外,一般的Linux操作系统,启动应用时,只是简单通过fork功能创建进程,执行应用启动,并没有对应用后续自行创建的子进程以及孙进程等做监控,不易完成对关联进程的暂停及回收等操作。

本方法中应用由统一的启动器启动,配合窗口管理器,提供基本的前后台生命周期能力,配合Linux的cgroup机制,为每个应用创建独立的进程管理组,可以管理到应用关联的所有子孙进程,实现全部应用关联进程的暂停,回收等控制,增强了对Linux应用生命周期的管理,降低了能耗,提升了系统的运行效率,降低对设备硬件性能的要求。

下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的Linux应用进程管理方法进行详细地说明。

如图1所示,本申请实施例提供的一种Linux应用进程管理方法,该方法可以包括下述步骤101和步骤102:

步骤101、获取目标应用的进程状态变更信息。

示例性地,本身实施例提供的Linux应用进程管理方法,基于系统级的应用进程管理服务与应用端组件的配合,基于应用端的组件,应用进程管理服务可以与应用的进程间建立通信连接,进而实现应用进程管理服务对应用进程的全方位控制。即本申请实施例提供的Linux应用进程管理方法的执行主体可以为上述应用进程管理服务。

示例性地,上述应用端组件可以为一个程序库,用于应用端集成后实现与上述应用进程管理服务的通信。即,Linux应用若想要实现与上述应用进程管理服务的通信,则必须集成上述应用端组件。

示例性地,上述目标应用的进程状态变更信息可以为上述应用进程管理服务获取的,并基于该进程状态变更信息,向Linux应用进程发送与进程状态变更信息对应的控制指令,进而实现对Linux进程的控制与管理。

示例性地,上述进程状态变更信息可以包括以下至少一项:创建子进程,使进程进入非激活状态,使进程进入激活状态,隐藏进程,挂起进程,恢复进程,终止进程等。可以理解的是,上述进程的非激活状态表示该进程正在运行,但该进程所对应的窗口不拥有用户焦点;上述进程的激活状态表示该进程正在运行,且该进程所对应的窗口拥有用户焦点;上述隐藏进程表示,该进程正在运行,但该进程对应的窗口被隐藏。

示例性地,上述目标应用的进程状态变更信息可以是上述应用进程管理服务主动获取的,也可以是其他系统服务发送给应用进程管理服务的,例如,窗口管理器可以向应用进程管理服务发送窗口隐藏消息等。

步骤102、基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作。

其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。

可以理解的是,基于上述应用进程管理服务与应用进程间建立的目标通信连接,应用进程管理服务可以在获取到应用进程的进程状态变更信息后,基于该进程状态变更信息,通过该目标通信连接,向对应的进程发送控制信息,应用端组件在接收到该控制信息后,执行与该控制信息对应的操作,进而控制该进程。

示例性地,Linux应用在创建后,基于该应用的主进程创建的所有子进程以及孙子进程均被纳入同一个控制群组(control group,cgroup)中,即上述目标控制群组。上述应用进程管理服务可以通过该控制群组对目标控制群组中每个进程进行监控,获取每个进程所关联的进程,以及进程间的层级关系等。

示例性地,应用进程管理服务在获取到上述进程状态变更信息后,基于该进程状态变更信息,通过上述目标通信连接,向该进程状态变更信息指示的Linux应用进程发送对应的控制指令,控制该Linux进程执行相应的动作,进而实现应用进程管理服务对Linux应用进程从创建到终止的整个生命周期的管理。

如此,通过目标应用的目标控制群组,获取该目标控制群组中每个进程的进程信息,并与之建立通信连接。之后,当系统获取到目标控制群组中目标应用的进程状态变更信息时,基于该进程状态变更信息,通过与目标进程建立的目标通信连接,向该目标进程发送控制信,控制目标进程执行与所述状态变更信息对应的操作,进而实现对目标应用的每个进程整个生命周期的管理。

可选地,在本申请实施例中,若想要实现对Linux应用进程的生命周期管理,基于该Linux应用,创建该Linux应用的所有进程的控制群组。

示例性地,上述步骤101之前,本申请实施例提供的Linux应用进程管理方法,还可以包括以下步骤103至步骤106:

步骤103、获取所述目标应用的启动请求.

步骤104、响应于所述启动请求,创建目标应用进程。

示例性地,上述目标应用进程为上述目标应用的主进程,在该目标应用的主进程创建后,才能够创建上述目标控制群组,并将后续创建的其他进程也添加至该目标控制群组中。

步骤105、在所述目标应用进程创建成功的情况下,创建所述目标控制群组,将所述目标应用进程加入所述目标控制群组,并建立与所述目标应用进程的通信连接。

步骤106、基于所述目标应用进程的当前运行状态,记录所述目标应用进程的状态信息。

示例性地,在上述目标应用进程创建成功后,上述应用进程管理服务需要记录该目标应用进程的进程标识(process identification,pid),以及该目标应用进程的当前运行状态,以方便后续对该进程进行管理以及获取或更新该进程的当前运行状态。

示例性地,在上述目标应用启动完成后,上述应用进程管理服务还可以从上述窗口管理器获取目标应用进程所创建的窗口的身份标识(identity document,ID),并记录该目标应用进程以及该窗口的状态信息。即上述目标应用进程的状态信息还可以包括该目标应用进程所对应窗口的窗口状态信息。

举例说明,如图2所示,为Linux应用主进程启动流程示意图。应用进程管理服务在获取到Linux应用的程序启动请求后,通过fork功能创建该Linux应用的主进程(即上述目标应用进程)。该主进程创建成功后,向应用进程管理服务反馈创建成功结果,并返回该主进程的PID。之后,应用进程管理服务基于该主进程为该目标应用建立控制群组(即上述目标控制群组),并将该主进程的PID添加至应用进程管理服务的管理任务中。对于Linux应用,在主进程创建成功后,继续执行应用的正常启动流程,并完成该Linux应用的启动。

在Linux应用启动流程完成后,该主进程建立与应用进程管理服务间的通信连接,应用进程管理服务在成功建立与主进程的通信连接后,向该主进程发送建立成功消息。应用进程管理服务可以通过与主进程间建立的通信连接,向该主进程发送控制指令。

在主进程启动流程完成后,该主进程向Linux窗口管理器提交窗口显示请求,窗口管理器在接收到该请求后,将主进程的窗口作为当前窗口渲染合成,并将该窗口设置为焦点窗口。

进一步可选地,在本申请实施例中,在Linux应用的主进程创建成功后,对于在该主进程基础上创建的子进程,进程管理服务也需要与其建立通信连接,并记录其当前状态。

示例性地,上述步骤106之后,本申请实施例提供的Linux应用进程管理方法,还可以包括以下步骤107至步骤110:

步骤107、获取所述目标应用进程的子进程创建成功的消息。

步骤108、建立与所述目标应用进程的子进程间的通信连接。

步骤109、将所述目标应用进程的子进程加入所述目标控制群组。

步骤110、基于所述目标应用进程的子进程的当前运行状态,记录所述目标应用进程的子进程的状态信息。

示例性地,与上述Linux应用的主进程的创建流程类似,应用进程管理服务在Linux应用的子进程创建成功后,与该子进程建立通信连接,并在成功建立通信连接后,将结果反馈至子进程。

可以理解的是,应用进程管理服务需要与Linux应用的进程进行通信,需要与Linux应用的每个进程都建立通信连接。

举例说明,如图3所示,为Linux应用的子进程启动流程示意图。当Linux应用主进程需要创建子进程时,需要向Linux内核请求创建子进程,具体地,通过fork功能创建子进程。Linux内核创建子进程后,通过主进程启动时创建的控制群组cgroup将子进程加入其父进程(即主进程)的进程组。将某个进程以及该进程的子孙进程加入该进程的进程组,是为了方便获取与该进程相关联的进程。

Linux内核创建子进程成功后,子进程执行具体的启动流程,之后,创建与应用进程管理服务间的通信连接。

如此,应用进程管理服务可以通过以上方法,与Linux应用创建的所有进程建立通信连接,方便后续通过该通信连接管理Linux应用的每个进程。

可选地,在本申请实施例中,基于上述已经创建的目标控制群组,应用进程管理服务可以通过与目标控制群组中每个进程建立的通信连接,实现对每个进程整个生命周期的管理。

示例性地,基于进程的不同状态,本申请实施例提供的以下示例,具体描述了如何通过应用进程管理服务实现对进程的管理。

示例1:

在示例1中,若想要控制目标控制群组中的某个进程进入非激活状态,则可以按照以下控制流程进行控制。

示例性地,上述步骤101可以包括以下步骤101a:

步骤101a、获取窗口焦点变更消息。

示例性地,上述窗口焦点变更消息为应用进程管理服务从Linux窗口管理器获取的。

示例性地,上述步骤102可以包括以下步骤102a:

步骤102a、控制获取窗口焦点的进程进入激活状态,并在失去窗口焦点的进程满足预设条件的情况下,通过所述目标通信连接,控制所述失去窗口焦点的进程进入非激活状态。

其中,进入非激活状态的进程会关闭部分功能,进入激活状态的进程会重新启用进程进入非激活状态时关闭的功能。

示例性地,区别于通过Linux控制指令直接控制某个进程的窗口焦点变更,应用进程管理服务会先判断上述失去窗口焦点的进程是否满足预设条件,例如,失去窗口焦点的进程是否还有显示的窗口等。并在满足预设条件的情况下,才会控制失去窗口焦点的进程进入非激活运行状态。

举例说明,如图4所示,为应用进程管理服务控制进程进入非激活运行状态的流程示意图。应用进程管理服务在获取到Linux窗口管理器发送的窗口焦点变更消息后,应用进程管理服务根据焦点窗口及各进程组状态,计算进程状态变更,即哪些进程进入激活运行状态,哪些进程进入非激活运行状态。

对于获取焦点的进程,重新激活相关功能,并进入激活运行状态,对于失去焦点的进程,暂停相关功能,并进入非激活运行状态。

示例2:

在示例2中,若想要控制目标控制群组中的某个进程进入不可见运行状态,则可以按照以下控制流程进行控制。

示例性地,上述步骤101,可以包括以下步骤101b:

步骤101b、获取窗口隐藏消息。

示例性地,该窗口隐藏消息用于控制进程对应的窗口进入隐藏状态。

示例性地,上述步骤102,可以包括以下步骤102b1和步骤102b2:

步骤102b1、在第一进程所对应的窗口全部处于隐藏状态的情况下,通过所述目标通信连接,控制所述第一进程进入不可见运行状态。

步骤102b2、停止渲染所述第一进程的窗口,并在所述第一进程中所有进程均处于不可见运行状态的情况下,降低第一进程组的资源优先级。

其中,所述第一进程为:第一窗口所属的进程;所述第一窗口为:所述窗口隐藏消息指示的需要隐藏的窗口;所述第一进程组包括:所述第一进程,和/或,所述第一进程的子进程。

示例性地,上述第一进程即为步骤101中的目标进程。上述第一进程以及第一进程的子进程组成第一进程组。

举例说明,如图5所示,为应用进程管理服务控制进程进入不可见运行状态的流程示意图。应用进程管理服务在获取到Linux窗口管理器发送的窗口隐藏消息后,根据隐藏窗口及各进程组状态,计算进程状态变更,同时,Linux窗口管理器释放需要隐藏的窗口对应的surface资源。

若所要隐藏的窗口所属的进程的全部窗口均隐藏不可见,则该进程进入不可见运行状态。之后,停止该进程相关窗口内容的渲染。并且,在该进程的进程组中所有进程均处于不可见运行状态的情况下,适当降低该进程组的资源优先级。

示例3:

在示例3中,若想要控制目标控制群组中的某个进程进入挂起状态,则可以按照以下控制流程进行控制。

示例性地,上述步骤101,可以包括以下步骤101c:

步骤101c、获取第二进程的挂起消息。

其中,所述挂起消息用于指示所述第二进程进入挂起状态。

示例性地,上述第二进程为上述步骤101中的目标进程。

示例性地,上述步骤102,可以包括以下步骤102c1至步骤102c3:

步骤101c1、获取所述第二进程的窗口状态信息。

示例性地,上述窗口状态信息用于指示第二进程所对应的所有窗口的当前状态。

步骤101c2、在所述窗口状态信息指示所述第二进程所对应的窗口均处于隐藏状态的情况下,通过所述目标通信连接,向所述第二进程发送第一消息。

其中,所述第一消息用于通知所述第二进程在第一预设时间内保留目标数据;所述目标数据为所述第二进程恢复时所需的必要数据。

示例性地,上述第一预设时间为上述第二进程挂起之前保留回复时所需要的必要数据的时间。应用进程管理服务会首先通知第二进程将在第一预设时间后将该第二进程挂起,第二进程在接收到该通知后,在第一预设时间内完成数据的保存,方便以后进程恢复时能够恢复到当前的运行状态。

步骤101c3、当所述第一预设时间结束后,向所述第二进程发送SIGINT消息,控制所述第二进程进入挂起状态。

示例性地,若上述第二进程对应多个窗口,则需要考虑每个窗口的状态。在第二进程所对应的窗口均处于隐藏状态的情况下,控制该第二进程进入挂起状态。

步骤101c4、在第二进程组中的所有进程处于不可见运行状态的情况下,控制所述第二进程组中的进程进入挂起状态。

其中,所述第二进程组为上述第二进程所属的进程组。

示例性地,基于上述步骤,当进程进入挂起状态后,降低该进程对系统资源的占用。

举例说明,如图6所示,为应用进程管理服务控制进程进入挂起状态的流程示意图。应用进程管理器在获取到需要挂起某个进程的消息后,向该被挂起的进程发送挂起消息,该挂起消息用于指示被挂起的进程在挂起准备时间(即上述第一预设时间)内保留恢复时所需的必要数据,方便在恢复该进程时能够将该进程恢复至挂起之前的状态。

之后,应用进程管理器在上述挂起准备时间结束后,向被挂起的进程发送SIGINT消息,Linux内核控制该进程进入挂起状态。最后,应用进程管理服务将该被挂起的进程标记为挂起状态。

示例4:

在示例4中,基于上述示例3,若想要控制目标控制群组中的某个进程从挂起状态恢复,则可以按照以下控制流程进行控制。

示例性地,上述步骤101,可以包括以下步骤101d:

步骤101d、获取所述第二进程的恢复消息。

其中,所述恢复消息用于指示所述第二进程从挂起状态进入正常运行状态。

示例性地,上述步骤102,可以包括以下步骤102d1至步骤102d3:

步骤102d1、通过所述目标通信连接,向所述第二进程发送SIGCONT消息。

示例性地,应用进程管理服务想要恢复被挂起的第二进程时,可以直接向该第二进程发送SIGCONT消息。

步骤102d2、在所述第二进程处于正常运行状态的情况下,通过所述目标通信连接,向所述第二进程发送第二消息,控制所述第二进程基于所述目标数据恢复所述第二进程进入挂起状态前的运行状态。

示例性地,当第二进程从挂起状态恢复后,应用进程管理服务向该第二进程发送进程恢复通知,控制第二进程基于该第二进程在进程挂起时保留的数据恢复运行状态。

步骤102d3、向窗口管理器发送第三消息,恢复所述第二进程对应的窗口。

示例性地,应用进程管理服务在第二进程的数据及状态恢复后,通过窗口管理器重新拉起第二进程对应的窗口。

举例说明,如图7所示,为应用进程管理服务控制进程从挂起状态恢复的流程示意图。若应用进程管理器想要某个进程从挂起状态恢复为正常运行状态,则可以向被恢复的进程发送SIGINT消息,Linux内核恢复该进程的运行。之后,应用进程管理服务通知被恢复的进程恢复数据及状态,被恢复的进程基于之前挂起时保留的数据进行数据恢复及状态恢复。最后,应用进程管理服务,通过向窗口管理器发送指令的方式,重新拉起被恢复的进程对应的窗口。

示例5:

在示例5中,若想要控制目标控制群组中的某个进程终止,则可以按照以下控制流程进行控制。

示例性地,上述步骤101,可以包括以下步骤101e:

步骤101e、获取第三进程的应用停止信息。

示例性地,上述步骤102,可以包括以下步骤102e1至步骤102e6:

步骤102e1、在所述第三进程处于挂起状态的情况下,向所述第三进程发送SIGCONT消息,控制所述第三进程恢复运行状态。

示例性地,应用进程管理服务在终止第三进程时,需要判断该第三进程是否处于挂起状态,若该第三进程处于挂起状态,则该第三进程终止时,可能存在部分未保存的数据,因此,需要将该第三进程从挂起状态恢复。

步骤102e2、通过所述目标通信连接,向所述第三进程发送第四消息。

其中,所述第四消息用于指示所述第三进程在第二预设时间内完成停止前准备工作。

示例性地,在该第三进程处于正常运行状态的情况下,应用进程管理服务向第三进程发送上述第四消息,指示该第三进程在第二预设时间内保存好未保存的数据。

步骤102e3、当所述第二预设时间结束后,向所述第三进程发送SIGTERM消息。

示例性地,在上述第二预设时间结束后,应用进程管理服务再向第三进程发送SIGTERM,终止该第三进程。

步骤102e4、在所述第三进程终止超时的情况下,向所述第三进程发送SIGKILL消息。

示例性地,上述SIGINT消、SIGCONT消息、SIGTERM消息以及SIGKILL消息为Linux进程控制信号,该控制信号可以通过Linux内核发送至指定的进程。

示例性地,若上述第三进程终止超时,则应用进程管理服务还可以向第三进程发送SIGKILL消息,强制终止该第三进程。

步骤102e5、获取所述目标控制群组内与所述第三进程相关联的第四进程的进程状态信息。

步骤102e6、基于所述第四进程的进程状态信息,按照预设回收策略回收所述第四进程所占用的资源。

示例性地,在进程终止后,应用进程管理服务还需要对终止的进程进行资源回收。具体地,对于上述第三进程与基于该第三进程创建的子孙进程等,在终止第三进程后,可以判断上述第四进程是否还存在有正在显示的窗口等,决定是否回收第四进程所占用的资源。

举例说明,如图8所示,为应用进程管理服务控制进程终止的流程示意图。应用进程管理服务首先判断被终止的进程是否处于挂起状态,若是,则向被终止的进程发送SIGCONT消息,Linux内核恢复被挂起的进程运行。之后,应用管理服务向被终止的进程发送通知,通知该进程即将在一定时间(即上述第二预设时间)后被终止,被终止的进程在接收到该消通知后,执行终止前准备工作,保存必要的数据。

应用进程管理服务在上述时间结束后,向被终止的进程发送SIGTERM消息,Linux内核终止该进程。若该进程终止超时,则向该进程发送SIGKILL消息,强制终止该进程。之后,根据cgroup计算被终止进程的关联进程的进程状态,按预设资源回收策略进程资源回收。

如此,应用进程管理服务可以按照上述进程管理方法,对Linux应用的每个进程的整个生命周期进行管理。

本申请实施例提供的Linux应用进程管理方法,通过目标应用的目标控制群组,获取该目标控制群组中每个进程的进程信息,并与之建立通信连接。之后,当系统获取到目标控制群组中目标应用的进程状态变更信息时,基于该进程状态变更信息,通过与目标进程建立的目标通信连接,向该目标进程发送控制信,控制目标进程执行与所述状态变更信息对应的操作,进而实现对目标应用的每个进程整个生命周期的管理。

需要说明的是,本申请实施例提供的Linux应用进程管理方法,执行主体可以为Linux应用进程管理装置,或者该Linux应用进程管理装置中的用于执行Linux应用进程管理方法的控制模块。本申请实施例中以Linux应用进程管理装置执行Linux应用进程管理方法为例,说明本申请实施例提供的Linux应用进程管理装置。

需要说明的是,本申请实施例中,上述各个方法附图所示的。Linux应用进程管理方法均是以结合本申请实施例中的一个附图为例示例性的说明的。具体实现时,上述各个方法附图所示的Linux应用进程管理方法还可以结合上述实施例中示意的其它可以结合的任意附图实现,此处不再赘述。

下面对本申请提供的进行描述,下文描述的与上文描述的Linux应用进程管理方法可相互对应参照。

图9为本申请一实施例提供的Linux应用进程管理装置的结构会示意图,如图9所示,具体包括:

获取模块901,用于获取目标应用的进程状态变更信息;控制模块902,用于基于所述获取模块901获取的进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作;其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。

可选地,所述装置还包括:群组管理模块、通信模块和记录模块;所述获取模块901,还用于获取所述目标应用的启动请求;群组管理模块,用于响应于所述获取模块901获取的启动请求,创建目标应用进程;所述群组管理模块,还用于在所述目标应用进程创建成功的情况下,创建所述目标控制群组,将所述目标应用进程加入所述目标控制群组;所述通信模块,用于建立与所述目标应用进程的通信连接;所述记录模块,用于基于所述目标应用进程的当前运行状态,记录所述目标应用进程的状态信息。

可选地,所述获取模块901,还用于获取所述目标应用进程的子进程创建成功的消息;所述通信模块,还用于建立与所述目标应用进程的子进程间的通信连接;所述群组管理模块,用于将所述目标应用进程的子进程加入所述目标控制群组;所述记录模块,还用于基于所述目标应用进程的子进程的当前运行状态,记录所述目标应用进程的子进程的状态信息。

可选地,所述获取模块901,具体用于获取窗口焦点变更消息;所述控制模块902,具体用于控制获取窗口焦点的进程进入激活状态;所述控制模块902,还用于在失去窗口焦点的进程满足预设条件的情况下,通过所述目标通信连接,控制所述失去窗口焦点的进程进入非激活状态;其中,进入非激活状态的进程会关闭部分功能,进入激活状态的进程会重新启用进程进入非激活状态时关闭的功能。

可选地,所述装置还包括,显示模块和资源管理模块;所述获取模块901,具体用于获取窗口隐藏消息;所述控制模块902,具体用于在第一进程所对应的窗口全部处于隐藏状态的情况下,通过所述目标通信连接,控制所述第一进程进入不可见运行状态;所述显示模块,用于停止渲染所述第一进程的窗口;所述资源管理模块,用于在所述第一进程中所有进程均处于不可见运行状态的情况下,降低第一进程组的资源优先级;其中,所述第一进程为:第一窗口所属的进程;所述第一窗口为:所述窗口隐藏消息指示的需要隐藏的窗口;所述第一进程组包括:所述第一进程,和/或,所述第一进程的子进程。

可选地,所述获取模块901,具体用于获取第二进程的挂起消息;所述获取模块901,还用于获取所述第二进程的窗口状态信息;所述控制模块902,具体用于在所述窗口状态信息指示所述第二进程所对应的窗口均处于隐藏状态的情况下,通过所述目标通信连接,向所述第二进程发送第一消息;所述第一消息用于通知所述第二进程在第一预设时间内保留目标数据;所述目标数据为所述第二进程恢复时所需的必要数据;所述通信模块,具体用于当所述第一预设时间结束后,通过所述目标通信连接,向所述第二进程发送SIGINT消息;所述控制模块902,具体用于控制所述第二进程进入挂起状态;所述控制模块902,具体用于在第二进程组中的所有进程处于不可见运行状态的情况下,控制所述第二进程组中的进程进入挂起状态;其中,所述第二进程组为所述第二进程所属的进程组。

可选地,所述获取模块901,具体用于获取所述第二进程的恢复消息;所述恢复消息用于指示所述第二进程从挂起状态进入正常运行状态;所述通信模块,还用于向所述第二进程发送SIGCONT消息;所述通信模块,还用于在所述第二进程处于正常运行状态的情况下,通过所述目标通信连接,向所述第二进程发送第二消息;所述控制模块902,具体用于控制所述第二进程基于所述目标数据恢复所述第二进程进入挂起状态前的运行状态;所述通信模块,还用于向窗口管理器发送第三消息,恢复所述第二进程对应的窗口。

可选地,所述获取模块901,具体用于获取第三进程的应用停止信息;所述通信模块,还用于在所述第三进程处于挂起状态的情况下,向所述第三进程发送SIGCONT消息;所述控制模块902,具体用于控制所述第三进程恢复运行状态;所述通信模块,还用于通过所述目标通信连接,向所述第三进程发送第四消息;所述第四消息用于指示所述第三进程在第二预设时间内完成停止前准备工作;所述通信模块,还用于当所述第二预设时间结束后,向所述第三进程发送SIGTERM消息;所述通信模块,还用于在所述第三进程终止超时的情况下,向所述第三进程发送SIGKILL消息;所述获取模块901,还用于获取所述目标控制群组内与所述第三进程相关联的第四进程的进程状态信息;所述资源管理模块,还用于基于所述第四进程的进程状态信息,按照预设回收策略回收所述第四进程所占用的资源。

本申请提供的Linux应用进程管理装置,通过目标应用的目标控制群组,获取该目标控制群组中每个进程的进程信息,并与之建立通信连接。之后,当系统获取到目标控制群组中目标应用的进程状态变更信息时,基于该进程状态变更信息,通过与目标进程建立的目标通信连接,向该目标进程发送控制信,控制目标进程执行与所述状态变更信息对应的操作,进而实现对目标应用的每个进程整个生命周期的管理。

图10示例了一种电子设备的实体结构示意图,如图10所示,该电子设备可以包括:处理器(processor)1010、通信接口(Communications Interface)1020、存储器(memory)1030和通信总线1040,其中,处理器1010,通信接口1020,存储器1030通过通信总线1040完成相互间的通信。处理器1010可以调用存储器1030中的逻辑指令,以执行Linux应用进程管理方法,该方法包括:获取目标应用的进程状态变更信息;基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作;其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。

此外,上述的存储器1030中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本申请还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的Linux应用进程管理方法,该方法包括:获取目标应用的进程状态变更信息;基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作;其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。

又一方面,本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的Linux应用进程管理方法,该方法包括:获取目标应用的进程状态变更信息;基于所述进程状态变更信息,通过与所述目标进程建立的目标通信连接,控制目标进程执行与所述状态变更信息对应的操作;其中,所述目标进程为所述目标应用的目标控制群组中的进程;所述目标通信连接为所述目标进程创建时与所述目标进程建立的通信连接。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

25页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于多级轮询队列控制器部署学习模型的方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!