CN114281653B - 应用程序的监控方法、装置及计算设备 - Google Patents

应用程序的监控方法、装置及计算设备 Download PDF

Info

Publication number
CN114281653B
CN114281653B CN202210218043.1A CN202210218043A CN114281653B CN 114281653 B CN114281653 B CN 114281653B CN 202210218043 A CN202210218043 A CN 202210218043A CN 114281653 B CN114281653 B CN 114281653B
Authority
CN
China
Prior art keywords
application
list
application process
program
monitoring
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
Application number
CN202210218043.1A
Other languages
English (en)
Other versions
CN114281653A (zh
Inventor
魏志祥
张继德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202210218043.1A priority Critical patent/CN114281653B/zh
Priority to CN202210565316.XA priority patent/CN114880189A/zh
Publication of CN114281653A publication Critical patent/CN114281653A/zh
Application granted granted Critical
Publication of CN114281653B publication Critical patent/CN114281653B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3017Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is implementing multitasking

Abstract

本发明公开了一种应用程序的监控方法、装置及计算设备。上述方法中,应用程序的启动入口为操作系统自主桌面环境的环境设置程序,上述方法包括步骤:设置环境设置程序为应用进程的祖先进程;创建第一应用进程列表,并将环境设置程序的PID添加至第一应用进程列表,一应用进程列表用于记录正在运行的进程的PID以及正在运行的各进程之间的父子关系;以及响应于监控到第一应用进程列表中的进程发生变化,对第一应用进程列表进行更新。

Description

应用程序的监控方法、装置及计算设备
技术领域
本发明涉及应用程序监控技术领域,尤其是一种应用程序的监控方法、装置及计算设备。
背景技术
桌面操作系统,例如UOS(Unity Operating System)系统,其桌面环境的设计理念之一是让用户使用更安全。在桌面操作系统中,应用程序在桌面环境内生存,并且必须处于桌面环境的管控范围内,以免破坏桌面环境和系统环境。为防止应用程序脱离管控,方便对桌面环境下所有应用程序进行统一管理,需要监视应用程序启动和退出,在必要的时候由桌面环境主动将非法应用程序退出、销毁,以保障用户安全使用。
一些桌面操作系统(例如UOS系统)默认父进程回收子进程,为了避免产生僵尸进程,如果父进程先退出,则子进程将被托孤给systemd,由systemd来清理子进程将来退出后产生的垃圾信息。部分应用程序利用此托孤机制主动double fork后,父进程退出,将子进程托孤给systemd。
对应用程序进行监控的常规方法是通过XCB分析 _NET_CLIENT_LIST_STACKING数据得到所有图形窗口的窗口id,再通过XCB分析每个窗口的_NET_WM_PID,得到所有图形窗口对应的进程集合,然后对比所有图形窗口的进程集合和系统中所有进程集合, 取两者交集,得到所有图形应用程序的进程。这种方式以图形窗口为入口,获取所有图形窗口应用的进程PID(Process Identification)操作系统里指进程识别号,也就是进程标识符,根据获取到的图形窗口应用进程PID来监视应用的启动和退出情况。
上述方法需要操作系统主动获取应用进程状态,采用定时执行的方式来监视应用程序状态变化,消耗大,且效率较低。虽然能够获取到正常的图形应用,并对其进行监视,但是当图形应用double fork子进程,且子进程没有图形属性时,则不能被上述方法捕获,该子进程不在所有图形应用进程集合中,导致子进程失去监视。
综上,上述现有的应用程序监视方法仅能够对具有图形属性的程序进程进行监视,而通过double fork产生的不具有图形属性的子进程则将失去监视。
发明内容
为此,本发明提供了一种应用程序的监控方法、装置及计算设备,以力图解决或者至少缓解上面存在的至少一个问题。
根据本发明的一个方面,提供了一种应用程序的监控方法,所述应用程序的启动入口为操作系统自主桌面环境的环境设置程序,所述方法包括步骤:设置所述环境设置程序为应用进程的祖先进程;创建第一应用进程列表,并将所述环境设置程序的PID添加至所述第一应用进程列表,所述第一应用进程列表用于记录正在运行的进程的PID以及正在运行的各进程之间的父子关系;以及响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新。
可选地,在根据本发明的应用程序的监控方法中,所述响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新的步骤包括:响应于监控到所述第一应用进程列表中的进程产生子进程,将所述子进程的PID以及所述子进程与其他进程之间的父子关系添加至所述第一应用进程列表。
可选地,在根据本发明的应用程序的监控方法中,所述响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新的步骤包括:响应于监控到所述第一应用进程列表中的进程退出,将退出的进程的PID以及所述退出的进程与其他进程之间的父子关系从所述第一应用进程列表中删除,并将所述退出的进程的子进程作为所述退出的进程的父进程的子进程。
可选地,在根据本发明的应用程序的监控方法中,所述方法还包括步骤:创建应用进程树,所述应用进程树用于以图形的形式记录所述第一应用进程列表中的全部进程的PID以及各进程之间的关系;以及根据所述第一应用进程列表更新所述应用进程树。
可选地,在根据本发明的应用程序的监控方法中,所述方法还包括步骤:创建第二应用进程列表,所述第二应用进程列表用于记录当前正在运行的、并且作为所述环境设置程序的子进程的PID;以及更新所述第二应用进程列表。
可选地,在根据本发明的应用程序的监控方法中,所述应用程序包括:通过任务栏启动的应用程序、通过启动器启动的应用程序以及通过桌面启动的应用程序。
可选地,在根据本发明的应用程序的监控方法中,所述设置所述环境设置程序为应用进程的祖先进程的步骤包括:通过所述操作系统的内核设置所述环境设置程序为应用进程的祖先进程。
根据本发明的另一方面,还提供了一种应用程序的监控装置,所述应用程序的启动入口为操作系统自主桌面环境的环境设置程序,所述装置包括:祖先进程设置单元,适于设置所述环境设置程序为应用进程的祖先进程;第一列表创建单元,适于创建第一应用进程列表,并将所述环境设置程序的PID添加至所述第一应用进程列表,所述第一应用进程列表用于记录正在运行的进程的PID以及正在运行的各进程之间的父子关系;以及更新单元,适于响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新。
根据本发明的又一方面,还提供了一种计算设备,包括:至少一个处理器和存储有程序指令的存储器;当程序指令被处理器读取并执行时,使得计算设备执行如上的应用程序的监控方法。
根据本发明的再一方面,还提供了一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行如上的应用程序的监控方法。
本发明的应用程序的监控方法,将操作系统自主桌面环境的环境设置程序设置为所有应用的启动入口,应用启动后,将环境设置程序设置为应用进程的祖先进程,并创建第一应用进程列表,第一应用进程列表用于记录当前正在运行的全部应用进程PID,根据第一应用进程列表衍生出应用进程树和第二应用进程列表,应用进程树记录了当前正在运行的全部应用进程PID,第二应用进程列表只记录环境设置程序的子一代进程PID。
根据本发明的应用程序的监控方法、装置及计算设备,能够实现以下有益效果中的至少一种:统一启动应用入口,不论是从任务栏启动、启动器启动、还是从桌面启动的应用,均通过操作系统自主桌面环境的环境设置程序运行起来,能够保证启动流程统一、可控;在此基础上,设置桌面环境入口startdde为所有后代进程的祖先,能够确保所有应用进程、包括不具有图形属性的进程,均成为startdde的后代进程,使得应用进程无法逃离由startdde派生出的进程关系,全部应用进程及各进程之间的关系记录在第一应用进程列表中,通过第一应用进程列表可以监视应用程序的启动和退出;将第一应用进程列表转化为应用进程树,将监控应用程序启动和退出的行为转化为对应用进程树的监控,更加清晰直观。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的应用程序的监控方法的应用场景;
图2示出了根据本发明一个实施例的计算设备200的示意图;
图3示出了根据本发明一个实施例的应用程序的监控方法300的流程图;
图4示出了现有技术中应用进程树的示意图;
图5示出了现有技术中应用进程树的更新过程示意图;
图6示出了根据本发明一个实施例的应用进程树的更新过程示意图;
图7示出了根据本发明一个优选实施例的应用程序的监控装置700的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
针对现有上述现有的应用程序监视方法无法对通过double fork产生的不具有图形属性的子进程进行监视的问题,本发明提供了一种应用程序的监控方法、装置及计算设备。
图1示出了根据本发明一个实施例的应用程序的监控方法的应用场景。
如图1所示,应用程序的监控方法嵌入在桌面操作系统中,是对桌面操作系统作出的改进,能够对安装在桌面操作系统中的各种应用程序的启动及退出进行监控。
在一个实施例中,本发明的应用程序的监控方法可以在计算设备中执行。计算设备可以是任意具有存储和计算能力的设备,其例如可以实现为服务器、工作站等,也可以实现为桌面计算机、笔记本计算机等个人配置的计算机,或者实现为手机、平板电脑、智能可穿戴设备、物联网设备等终端设备,但不限于此。
图2示出了根据本发明一个实施例的计算设备200的示意图。需要说明的是,图2所示的计算设备200仅为一个示例,在实践中,用于实施本发明的应用程序的监控方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图2所示的计算设备200相同,也可以与图2所示的计算设备200不同。实践中用于实施本发明的应用程序的监控方法的计算设备可以对图2所示的计算设备200的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。
如图2所示,在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。
取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(µP)、微控制器(µC)、数字信息处理器(DSP)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器206可以包括操作系统220、一个或者多个应用222以及程序数据224。在一些实施方式中,应用222可以布置为在操作系统上由一个或多个处理器204利用程序数据224执行指令。
计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个A/V端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个I/O端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备200可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备200也可以实现为小尺寸便携(或者移动)电子设备的一部分。在根据本发明的实施例中,计算设备200被配置为执行根据本发明的实时应用程序的监控方法300。其中,计算设备200的应用222中包含安装在桌面操作系统中的各个应用的程序指令,而程序数据224还可以存储应用程序运行过程中所需要的各个数据。
根据本发明实施例的一种应用程序的监控方法300,其中,应用的启动入口为操作系统自主桌面环境的环境设置程序,方法300包括步骤:设置环境设置程序为应用进程的祖先进程;创建第一应用进程列表,并将环境设置程序的PID添加至第一应用进程列表,第一应用进程列表用于记录正在运行的进程的PID以及正在运行的各进程之间的父子关系;以及响应于监控到第一应用进程列表中的进程发生变化,对第一应用进程列表进行更新。
图3示出了根据本发明一个实施例的应用程序的监控方法300的流程图。方法300在计算设备(例如前述计算设备200)中执行,用于在操作系统启动之后对应用程序的启动和退出情况进行监视。
方法300在操作系统启动以后开始执行,方法300能够执行的前提是应用的启动入口为操作系统自主桌面环境的环境设置程序。应用启动的方式有很多种,包括桌面点击应用图标、任务栏点击驻留应用图标、以及启动器选择应用打开等。以UOS系统为例,其桌面环境的启动入口为startdde,为方便维护启动流程,将startdde设置为应用的启动入口,不论用户从桌面点击应用图标、从任务栏点击驻留应用图标、还是通过启动器选择应用打开,最终都是通过startdde上提供的接口LaunchApp来实现具体启动过程,也即所有应用程序均通过 startdde 的启动接口运行起来。
如图3所示,方法300始于步骤S310。
在步骤S310中,设置环境设置程序为应用进程的祖先进程。
利用操作系统的设置祖先进程(例如UOS系统内核在Version 3.4 中添加的设置祖先进程的功能),设置环境设置程序startdde为所有后代进程的祖先进程,那么,当应用程序退出后,其子进程将被托孤给startdde,以此保证应用进程的后代进程不会脱离startdde。设置startdde为后代进程的祖先进程可以采用如下伪代码实现:
if (prctl(PR_SET_CHILD_SUBREAPER, 1) < 0)
{
printf(“set subreaper failed\n”);
if (errno == EINVAL) {
printf(“maybe the kernel version is < 3.4”);
}
}
接下来,在步骤S320中,创建第一应用进程列表,并将环境设置程序的PID添加至第一应用进程列表。其中,第一应用进程列表用于记录当前正在运行的所有应用进程的PID以及各进程之间的父子关系。
接下来,在步骤S330中,响应于监控到第一应用进程列表中的进程发生变化,对第一应用进程列表进行更新。进程发生变化包括进程产生子进程和进程退出。
当第一应用进程列表中的进程产生新的子进程时,将新的子进程的PID、新的子进程与其父进程之间的父子关系添加至第一应用进程列表。判断一个进程是否产生了子进程的方法可以是利用现有的工具,例如某些查询命令,定时对第一应用进程列表中的进程进行查询,查询这些进程是否产生了新的子进行。由于startdde是所有应用程序进程的祖先进程,因此,一个应用启动后,startdde将产生新的子进程,子进程可能又会繁衍出子进程,这些新产生的进程以及这些进程与其他进程之间的关系都会被查询命令查询出来,查询出来的新的进程的PID以及这些进程与其他进程之间的父子关系将被添加到第一应用进程列表中。当第一应用进程列表中的某个进程退出时,将退出的进程的PID以及退出的进程与其他进程之间的父子关系从第一应用进程列表中删除,并将退出的进程的子进程作为退出的进程的父进程的子进程。
当一个进程退出时,会向其父进程发出退出信号,即SIGCHLD信号。当某个进程收到其子进程发来的SIGCHLD信号时,则说明发出子SIGCHLD信号的进程已退出。例如,A是某应用程序的一个进程,A的子进程是B,B的子进程是C,B在退出时向A发送SIGCHLD信号,操作系统将B的PID、B与A之间的父子关系、以及B与C之间的父子关系一并从第一应用进程列表中删除,并将进程C与A之间的关系修改为父子关系,即,C成为A的子进程。
一台计算机从开机到关机的整个过程涉及很多应用程序的启动和退出,而每个应用程序又涉及很多进程,随时都有可能有新的子进程产生,同样地,随时也都有可能有进程退出。子进程的产生与进程退出二者之间并无严格的时序限制,只要系统检测到有新的进程出现或者有进程退出,就会对第一应用进程列表进行更新,应用程序开发人员可根据需要随时查看第一应用进程列表,监视应用程序的启动和退出。
根据本发明的一个实现方式,方法300还包括步骤:创建应用进程树,应用进程树用于以图形的形式记录第一应用进程列表中的全部进程的PID以及各进程之间的关系;以及更新应用进程树。这里的各进程之间的关系是指第一应用进程列表中的各进程之间的父子关系。
更新应用进程树的方式为:以第一应用进程列表作为数据源,当第一应用进程列表发生变化时,对应用进程树进行更新。例如,一个进程收到其子进程发来的SIGCHLD信号时,对第一应用进程列表进行更新,然后根据第一应用进程列表对应用进程树进行更新。应用进程树能够使应用程序开发人员能够直观地观察应用程序子代进程的启动和退出。
在现有技术中,应用进程树以systemd作为根节点,所有应用程序进程(包括startdde)均为systemd的后代进程,如图4所示。当某个进程退出时,将该进程的子进程作为systemd的子进程,例如图5所示的应用进程树,箭头左侧表示进程app3未退出,箭头右侧表示进程app3已退出,可见,进程app3退出后,其子进程app3_1成为systemd的子进程。
而本发明实施例的应用进程树则以第一应用进程列表为数据源,记录以startdde为根节点的所有应用程序进程之间的关系,应用进程为应用进程树上的子节点。如图6所示,箭头左侧表示进程app2未退出,箭头右侧表示进程app2已退出。应用程序进程app2退出时,startdde接收到应用子进程app2的SIGCHLD信号,startdde的孙进程app2_1托孤给startdde,成为startdde的子进程,进程app2_1与其子进程app2_1_1及app2_1_2的父子关系保持不变,更新第一应用进程列表,根据第一应用进程列表更新应用进程树。
根据本发明的一个实现方式,方法300还包括步骤:创建第二应用进程列表,第二应用进程列表用于记录当前正在运行的、并且作为环境设置程序的子进程的PID;以及更新第二应用进程列表。
第二应用进程列表以第一应用进程列表作为数据源,用来记录由startdde派生的子一代进程。应用启动后,将应用PID添加到第二应用进程列表;应用退出时,将应用PID从第二应用进程列表中删除;应用进程托孤,则删除该应用进程PID,并将其子进程PID添加到第二应用进程列表。应用进程退出时,可能存在其繁衍的子代进程,如果子代进程不退出,那么这种情况下该应用并未完全退出。所以,当startdde接收到SIGCHLD信号,检查当前退出的进程是否存在于第二应用进程列表,存在则表示这是一个应用程序退出,将其从第二应用进程列表中删除,将其子进程放进应用进程列表。以图6中的进程app2为例,进程app2退出时,进程app2_1托孤给startdde,将进程app2的PID从第二应用进程列表中删除,并将进程app2_1的PID添加到第二应用进程列表中。应用程序开发人员能够根据第二应用进程列表快速判断出哪些应用已完全退出、哪些应用还没有完全退出。
根据本发明的一个实现方式,统一启动应用、创建第二应用进程列表及将应用进程添加到第二应用进程列表可以采用如下所示的伪代码实现:
// 第二应用进程列表,只记录startdde应用子进程信息,不记录孙进程
var launchedApp map[uint32]string
// 统一启动应用入口
func LaunchApp(desktopFile string, timestamp uint32) {
commandName, arg := getExec(desktopFile)
cmd := exec.Command(commandName, arg)
cmd.Start()
pid := cmd.Process.Pid
// 将应用进程添加到第二应用进程列表
launchedApp[uint32(pid)] = commandName + arg
}
根据本发明的一个实现方式,出现新的进程时更新第二进程列表和应用进程树可以采用如下伪代码实现:
// 查找所有子进程信息
func GetChildProcessInfos(pid uint32) (childinfos ProcessInfos) {
out, _ := exec.Command("/bin/bash", "-c", "pgrep -P " +strconv.Itoa(int(pid)) + " -l").CombinedOutput()
infos := strings.Split(string(out), "\n")
for _, info := range infos {
childinfo := strings.Split(info, " ")
childpid, err := strconv.Atoi(childinfo[0])
// 过滤非应用进程
if err != nil || !isContained(launchedApp, uint32(childpid)){
continue
}
childinfos = append(childinfos, &ProcessInfo{
pid: uint32(childpid),
cmd: childinfo[1],
})
}
}
// 设置应用进程树节点
type PidNode struct {
pid uint32
cmd string
parent *PidNode
childs []*PidNode
}
// 创建应用进程树
type PidTree struct {
root *PidNode
treeMutex sync.Mutex
}
// 检查startdde 子进程中应用进程变化
func (t *PidTree) getStartddeChildProcessChangeInfos() (changeInfosmap[string]ProcessInfos) {
// 获取 startdde 应用孙进程变化信息
newChildInfos := GetChildProcessInfos(t.root.pid)
changeInfos["del"] = getDelProcess(newChildInfos)
changeInfos["add"] = getAddProcess(newChildInfos)
}
// startdde监听应用进程退出
func (s *Startdde) listenSignal() {
c := make(chan os.Signal, 5)
signal.Notify(c, syscall.SIGCHLD)
for {
select {
case sig := <-c:
if sig == syscall.SIGCHLD {
// 子进程退出,将孙进程放入第二子进程列表
childProcessChangeInfos := s.launchedApptree.getStartddeChildProcessChangeInfos()
if len(childProcessChangeInfos["del"]) > 0{
// 更新第一应用进程列表
for _, info := rangechildProcessChangeInfos["del"] {
delete(launchedApp, info.pid)
}
for _, info := rangechildProcessChangeInfos["add"] {
launchedApp[info.pid] = info.cmd
}
// 更新应用进程树
s.launchedApptree.update()
}
}
}
}
}
根据本发明的一个实现方式,有进程退出时更新应用进程树可以采用如下伪代码实现:
// 添加树节点,将应用进程添加到进程树上
func (n *PidNode) setChild (childInfo *ProcessInfo) *PidNode{
child := &PidNode{
pid: childInfo.pid,
cmd: childInfo.cmd,
parent: n,
}
if n.childs == nil {
n.childs = []*PidNode {child}
} else {
n.childs = append(n.childs, child)
}
return child
}
// 递归获取所有子进程信息
func (n *PidNode) recursiveInsert() {
// 获取当前进程的所有应用子进程
childInfos := GetChildProcessInfos(n.pid)
if len(childInfos) == 0 {
return
}
for _, info := range childInfos {
child := n.setChild(info)
child.recursiveInsert()
}
}
// 更新应用树
func (t *PidTree) update() {
t.treeMutex.Lock()
defer t.treeMutex.Unlock()
t.root.recursiveInsert()
}
// 定时更新
func (t *PidTree) loopUpdate() {
go func() {
for {
select {
case <-time.After(time.Second * 10):
t.update()
}
}
}()
}
本发明的实施例还提供了一种应用程序的监控装置700,该装置能够执行如上文所描述的应用程序的监控方法300的各步骤处理,并且能够达到与方法300相同的技术效果。下面,结合图7来描述上述应用程序的监控装置700。
如图7所示,应用程序的监控装置700包括祖先进程设置单元710、第一列表创建单元720以及更新单元730。
祖先进程设置单元710适于设置环境设置程序为应用进程的祖先进程。
第一列表创建单元720适于创建第一应用进程列表,并述环境设置程序的PID添加至第一应用进程列表,第一应用进程列表用于记录正在运行的进程的PID以及正在运行的各进程之间的父子关系。
更新单元730适于响应于监控到第一应用进程列表中的进程发生变化,对第一应用进程列表进行更新。
根据本发明的一个实现方式,更新单元730还包括:进程添加单元,适于响应于监控到第一应用进程列表中的进程产生子进程,将子进程的PID以及子进程与其他进程之间的父子关系添加至第一应用进程列表。
根据本发明的一个实现方式,更新单元730还包括:进程删除单元,适于响应于监控到第一应用进程列表中的进程退出,将退出的进程的PID以及退出的进程与其他进程之间的父子关系从第一应用进程列表中删除,并将退出的进程的子进程作为退出的进程的父进程的子进程。
根据本发明的一个实现方式,应用程序的监控装置700还包括:应用进程树创建单元,适于创建应用进程树,应用进程树用于以图形的形式记录第一应用进程列表中的全部进程的PID以及各进程之间的关系;以及应用进程树更新单元,适于根据第一应用进程列表更新应用进程树。
根据本发明的一个实现方式,应用程序的监控装置700还包括:第二应用进程列表创建单元,适于创建第二应用进程列表,第二应用进程列表用于记录当前正在运行的、并且作为环境设置程序的子进程的PID;以及第二应用进程列表更新单元,适于更新第二应用进程列表。
根据本发明的一个实现方式,应用程序包括:通过任务栏启动的应用程序、通过启动器启动的应用程序以及通过桌面启动的应用程序。
根据本发明的一个实现方式,祖先进程设置单元710通过操作系统的内核设置环境设置程序为应用进程的祖先进程。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的应用程序的监控方法方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的优选实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。

Claims (9)

1.一种应用程序的监控方法,所述应用程序的启动入口为操作系统自主桌面环境的环境设置程序,所述方法包括步骤:
设置所述环境设置程序为应用进程的祖先进程;
创建第一应用进程列表,并将所述环境设置程序的PID添加至所述第一应用进程列表,所述第一应用进程列表用于记录正在运行的进程的PID以及正在运行的各进程之间的父子关系;以及
响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新;
所述响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新的步骤包括:
响应于监控到所述第一应用进程列表中的进程退出,将退出的进程的PID以及所述退出的进程与其他进程之间的父子关系从所述第一应用进程列表中删除,并将所述退出的进程的子进程作为所述退出的进程的父进程的子进程。
2.如权利要求1所述的应用程序的监控方法,所述响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新的步骤包括:
响应于监控到所述第一应用进程列表中的进程产生子进程,将所述子进程的PID以及所述子进程与其他进程之间的父子关系添加至所述第一应用进程列表。
3.如权利要求1或2所述的应用程序的监控方法,还包括步骤:
创建应用进程树,所述应用进程树用于以图形的形式记录所述第一应用进程列表中的全部进程的PID以及各进程之间的关系;以及
根据所述第一应用进程列表更新所述应用进程树。
4.如权利要求1或2所述的应用程序的监控方法,还包括步骤:
创建第二应用进程列表,所述第二应用进程列表用于记录当前正在运行的、并且作为所述环境设置程序的子进程的PID;以及
更新所述第二应用进程列表。
5.如权利要求1或2所述的应用程序的监控方法,其中,所述应用程序包括:通过任务栏启动的应用程序、通过启动器启动的应用程序以及通过桌面启动的应用程序。
6.如权利要求1或2所述的应用程序的监控方法,其中,所述设置所述环境设置程序为应用进程的祖先进程的步骤包括:
通过所述操作系统的内核设置所述环境设置程序为应用进程的祖先进程。
7.一种应用程序的监控装置,所述应用程序的启动入口为操作系统自主桌面环境的环境设置程序,所述装置包括:
祖先进程设置单元,适于设置所述环境设置程序为应用进程的祖先进程;
第一列表创建单元,适于创建第一应用进程列表,并将所述环境设置程序的PID添加至所述第一应用进程列表,所述第一应用进程列表用于记录正在运行的进程的PID以及正在运行的各进程之间的父子关系;以及
更新单元,适于响应于监控到所述第一应用进程列表中的进程发生变化,对所述第一应用进程列表进行更新;
更新单元包括:进程删除单元,适于响应于监控到第一应用进程列表中的进程退出,将退出的进程的PID以及退出的进程与其他进程之间的父子关系从第一应用进程列表中删除,并将退出的进程的子进程作为退出的进程的父进程的子进程。
8.一种计算设备,包括:
至少一个处理器和存储有程序指令的存储器;
当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如权利要求1-6中任一项所述的应用程序的监控方法。
9.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-6中任一项所述的应用程序的监控方法。
CN202210218043.1A 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备 Active CN114281653B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210218043.1A CN114281653B (zh) 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备
CN202210565316.XA CN114880189A (zh) 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210218043.1A CN114281653B (zh) 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202210565316.XA Division CN114880189A (zh) 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备

Publications (2)

Publication Number Publication Date
CN114281653A CN114281653A (zh) 2022-04-05
CN114281653B true CN114281653B (zh) 2022-07-12

Family

ID=80882340

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202210565316.XA Pending CN114880189A (zh) 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备
CN202210218043.1A Active CN114281653B (zh) 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202210565316.XA Pending CN114880189A (zh) 2022-03-08 2022-03-08 应用程序的监控方法、装置及计算设备

Country Status (1)

Country Link
CN (2) CN114880189A (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115220993B (zh) * 2022-04-20 2024-03-12 广州汽车集团股份有限公司 进程监控方法、装置、车辆及存储介质
CN117272305B (zh) * 2023-11-15 2024-02-23 苏州元脑智能科技有限公司 一种进程处理方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101630262A (zh) * 2009-07-17 2010-01-20 北京数帅科技有限公司 基于Linux操作系统的子进程监控方法
CN101944167A (zh) * 2010-09-29 2011-01-12 中国科学院计算技术研究所 识别恶意程序的方法及系统
CN105446805A (zh) * 2014-08-25 2016-03-30 中国科学院深圳先进技术研究院 shell脚本子进程管理方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040168157A1 (en) * 2003-02-18 2004-08-26 Robert Hundt System and method for creating a process invocation tree
CN100543683C (zh) * 2006-12-26 2009-09-23 华为技术有限公司 对进程进行监控的方法和系统
CN108241496B (zh) * 2016-12-23 2021-06-04 北京奇虎科技有限公司 应用程序的平滑升级方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101630262A (zh) * 2009-07-17 2010-01-20 北京数帅科技有限公司 基于Linux操作系统的子进程监控方法
CN101944167A (zh) * 2010-09-29 2011-01-12 中国科学院计算技术研究所 识别恶意程序的方法及系统
CN105446805A (zh) * 2014-08-25 2016-03-30 中国科学院深圳先进技术研究院 shell脚本子进程管理方法及系统

Also Published As

Publication number Publication date
CN114880189A (zh) 2022-08-09
CN114281653A (zh) 2022-04-05

Similar Documents

Publication Publication Date Title
CN114281653B (zh) 应用程序的监控方法、装置及计算设备
CN110058922B (zh) 一种提取机器学习任务的元数据的方法、装置
JP5758995B2 (ja) 仮想マシン間で分析の結果を共有するためのシステム、方法及びコンピュータ可読記憶媒体
WO2020024408A1 (zh) 测试装置、测试的方法及存储介质
US9274947B1 (en) Non-precise garbage collection in non-cooperative systems
RU2628921C1 (ru) Система и способ выполнения антивирусной проверки файла на виртуальной машине
US10169005B2 (en) Consolidating and reusing portal information
US8893272B2 (en) Method and device for recombining runtime instruction
CN109871290B (zh) 应用于Java的调用堆栈追踪方法、装置和存储介质
CN110750315B (zh) Android系统中的类加载方法、装置、设备和存储介质
EP4033349A1 (en) Method and apparatus for generating mirror image file, and computer-readable storage medium
JP6028657B2 (ja) 検証プログラム、検証方法および検証装置
US10915624B2 (en) Method and apparatus for determining behavior information corresponding to a dangerous file
CN113806031A (zh) 通过对象锁保护资源的方法和装置
CN116610336A (zh) 一种固件升级方法、系统、装置及可读存储介质
CN112988277B (zh) 规则文件加载方法、装置、服务器及介质
CN114996955A (zh) 一种云原生混沌工程实验的靶场环境构建方法及装置
CN110908644B (zh) 状态节点的配置方法、装置、计算机设备和存储介质
CN106776296A (zh) 覆盖率检测的启动方法、装置和启动设备
Agrawal et al. Forensic of an unrooted mobile device
JP6577241B2 (ja) ログ抽出システム、ログ抽出方法およびログ抽出プログラム
EP4136541B1 (en) Transactional support for non-relational database
CN104808985A (zh) 应用程序中对象的管理方法及装置
CN117492952A (zh) 一种基于大数据的工作流方法、系统及装置
Kinny et al. Survey Paper on Different MINIX Versions to Support Implementation of IPSec Protocol in MINIX OS

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