一种应用监控方法及装置制造方法
【专利摘要】本发明实施例公开了一种应用监控方法及装置,本发明实施例方法包括:当目标应用进程在系统中创建时,运行第一分叉函数,创建第一进程,所述第一进程为空白进程;运行第二分叉函数,通过所述第一进程创建第二进程;所述第二进程为所述第一进程的子进程,且为所述目标应用进程的监控进程;当所述第二进程创建完成,则删除所述第一进程,由所述系统的原始进程领养所述第二进程,并由所述第二进程对所述目标应用进程进行监控。
【专利说明】一种应用监控方法及装置
【技术领域】
[0001] 本发明涉及移动终端领域,尤其涉及一种应用监控方法及装置。
【背景技术】
[0002] 在Linux 2. 6. 13版本中引入了 inotify机制,可以对系统的文件和目录的变化进 行监控。inotify是一个Linux内核特性,它监控文件系统,并且及时向专门的应用程序发 出相关的事件警告,比如删除、读、写和卸载操作等,还可以跟踪这些操作的源头和目标等 细节。
[0003] 在Android系统中,在用户对应用进行卸载时,系统会删除应用的安装数据,通过 inotify机制,当系统监控到应用被卸载时,就可以设置唤起卸载调查页面的功能;在现有 技术中,采用JAVA本地调用(JNI,JavaNative Interface)以分叉(fork)函数的形式对目 标应用创建监控进程,在监控进程中利用inotify机制对目标应用的相关文件进行监控, 当监控到目标应用的相关文件被删除时,则认为目标应用被卸载,即可以触发唤起卸载调 查页面的操作。
[0004] 在现有技术中,直接在目标应用进程中通过fork函数创建监控进程,导致目标应 用进程中的一些句柄在监控进程(目标应用进程的子进程)中无法释放,以Binder通信机 制为例,若目标应用进程因卸载而终止,则Binder句柄在监控进程中无法释放,进而导致 系统内Binder的通信机制出现问题。并且,在这种情况下,若目标应用进程因卸载而终止, 还可能导致系统内存在僵尸进程的问题。
【发明内容】
[0005] 本发明实施例提供了一种应用监控方法及装置,用于避免因目标应用被卸载而导 致系统目标应用内的监控进程出现问题。
[0006] 本发明实施例提供的应用监控方法,包括:
[0007] 当目标应用进程在系统中创建时,运行第一分叉函数,创建第一进程,所述第一进 程为空白进程;
[0008] 运行第二分叉函数,通过所述第一进程创建第二进程;所述第二进程为所述第一 进程的子进程,且为所述目标应用进程的监控进程;
[0009] 当所述第二进程创建完成,则删除所述第一进程,由所述系统的原始进程领养所 述第二进程,并由所述第二进程对所述目标应用进程进行监控。
[0010] 本发明实施例提供的应用监控装置,包括:
[0011] 第一创建单元,用于当目标应用进程在系统中创建时,运行第一分叉函数,创建第 一进程,所述第一进程为空白进程;
[0012] 第二创建单元,用于运行第二分叉函数,通过所述第一进程创建第二进程;所述第 二进程为所述第一进程的子进程,且为所述目标应用进程的监控进程;
[0013] 维护单元,用于当所述第二进程创建完成,则删除所述第一进程,由所述系统的原 始进程领养所述第二进程,并由所述第二进程对所述目标应用进程进行监控。
[0014] 从以上技术方案可以看出,本发明实施例具有以下优点:
[0015] 在本发明实施例中,当目标应用进程在系统中创建时,通过分叉函数创建两次进 行,第一次为空白进程,第二次以该空白进程作为父进程创建目标应用进程的监控进程,并 且,在监控进程创建完成后,空白进程自动删除,由系统的原始进程作为父进程对该监控进 程进行领养;从而,由于监控进程不是目标应用进程的子进程,因此,当目标应用被卸载时, 不会对监控进程造成影响,也不会导致一些句柄无法释放以及僵尸进程的问题。
【专利附图】
【附图说明】
[0016] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所 需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施 例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获 得其他的附图。
[0017] 图1是本发明实施例中应用监控方法的一个流程示意图;
[0018] 图2是本发明实施例中应用监控方法的另一个流程示意图;
[0019] 图3是本发明实施例中应用监控装置的一个结构示意图。
【具体实施方式】
[0020] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0021] 请参阅图1,本发明实施例中应用监控方法的一个实施例包括:
[0022] 101、运行第一分叉函数,创建第一进程;
[0023] 当目标应用进程在系统中创建时,应用监控装置运行第一分叉函数,创建第一进 程,所述第一进程为空白进程。
[0024] 具体的,目标应用进程的创建可以有多种触发方式,如,移动终端在开机时,目标 应用进程可以自动创建;再如,当移动终端发生网络变更时,目标进程也可以在系统中重新 创建。
[0025] 具体的,本发明实施例中所述的系统可以为移动终端的操作系统。
[0026] 在本发明实施例中,应用监控装置为具有本发明实施例中应用监控方法的全部功 能的装置,可以为独单的物理设备,也可以为加载在计算机上的软件程序,或一个软件中的 功能模块,或单独软件的形式或以插件的形式存在。应用监控装置的描述仅仅是示意性的, 其中单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个 单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一 点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或 单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述集成的单元如果以软件 功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储 介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或 者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一 个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者 网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
[0027] 102、运行第二分叉函数,通过所述第一进程创建第二进程;
[0028] 应用监控装置运行第二分叉函数,通过所述第一进程创建第二进程;所述第二进 程为所述第一进程的子进程,且为所述目标应用进程的监控进程。
[0029] 具体的,在创建了所述第一进程之后,应用监控装置以所述第一进程为父进程,创 建作为目标应用进程的监控进程的第二进程。
[0030] 在本发明实施例中,第一分叉函数为创建第一进程的fork函数,第二分叉函数为 创建第二进程的fork函数;在实际应用中,分叉函数的实际内容可以是一致的,也可以是 不同的,此处分叉函数之前的"第一"、"第二"的描述仅是便于分别对应第一进程和第二进 程,并无实质含义,不应理解为对分叉函数具体内容的限定。
[0031] 103、原始进程领养所述第二进程,并由所述第二进程对所述目标应用进程进行监 控。
[0032] 当所述第二进程创建完成,则删除所述第一进程(即空白进程自动删除),由所述 系统的原始(init)进程领养所述第二进程,并由所述第二进程对所述目标应用进程进行 监控。
[0033] 在实际应用中,当一个子进程结束运行时,子进程的退出状态(返回值)会反馈给 系统,系统则以SIGCHLD信号将子进程被结束的事件告知父进程,此时子进程的进程控制 块仍驻留在内存中。当父进程收到SIGCHLD后,会通过系统调用获得子进程的退出状态, 然后内核就可以从内存中释放已结束的子进程的进程控制块;而如若父进程没有这么做的 话,子进程的进程控制块就会一直驻留在内存中,也即成为僵尸进程。在现有技术中,由于 监控进程作为目标应用进程的子进程,因此当目标应用被卸载时,目标应用进程也随之停 止运行,很可能没来得及在内存中释放已结束的子进程的进程控制块,从而导致僵尸进程 的问题。
[0034] 在本发明实施例中,当目标应用进程在系统中创建时,通过分叉函数创建两次进 行,第一次为空白进程,第二次以该空白进程作为父进程创建目标应用进程的监控进程,并 且,在监控进程创建完成后,空白进程自动删除,由系统的原始进程作为父进程对该监控进 程进行领养;从而,由于监控进程不是目标应用进程的子进程,因此,当目标应用被卸载时, 不会对监控进程造成影响,也不会导致一些句柄无法释放以及僵尸进程的问题。
[0035] 在实际应用中,监控进程在对目标应用进程进行监控时,可能难以分清"清空数 据"、"覆盖安装"以及"应用卸载"等用户操作,可能导致卸载调查页面的误触发,本发明实 施例有相应的解决方法,请参阅图2,本发明实施例中应用监控方法的另一个实施例包括:
[0036] 201、、运行第一分叉函数,创建第一进程;
[0037] 当目标应用进程在系统中创建时,应用监控装置运行第一分叉函数,创建第一进 程,所述第一进程为空白进程。
[0038] 示例性的,所述创建第一进程的具体过程可以:在应用配置文件(如,安卓系 统中的AndroidManifest. xml)中设定所述第一进程的进程标识,通过所述系统中合子 (zygote)进程的分叉函数机制,生成以所述进程标识命名的空白进程。
[0039] 202、运行第二分叉函数,通过所述第一进程创建第二进程;
[0040] 应用监控装置运行第二分叉函数,通过所述第一进程创建第二进程;所述第二进 程为所述第一进程的子进程,且为所述目标应用进程的监控进程。
[0041] 203、原始进程领养所述第二进程,并由所述第二进程对所述目标应用进程进行监 控。
[0042] 当所述第二进程创建完成,则删除所述第一进程(即空白进程自动删除),应用监 控装置通过系统的原始进程领养所述第二进程,并由所述第二进程对所述目标应用进程进 行监控。
[0043] 204、在所述目标应用进程的应用数据目录中生成卸载监控文件,并使用所述第二 进程对所述卸载监控文件进行监控;
[0044] 应用监控装置在所述目标应用进程的应用数据目录中生成卸载监控文件(如,安 卓系统中的uninstall, watch),并使用所述第二进程对所述卸载监控文件进行监控。
[0045] 当所述卸载监控文件被删除时,判断所述目标应用进程的安装文件(如,安卓系 统中的以APK为后缀的文件)是否被删除,若是,则确定当前的用户行为是应用卸载,可以 执行步骤205 ;若否,则确定当前的用户行为是数据清空,可以执行步骤206。
[0046] 在本发明实施例中,当发生覆盖安装时,由于系统并不会清除目标应用的数据,因 此,当应用监控装置检测到目标应用的进行卸载操作(覆盖安装时,需要先卸载再重装) 时,同时还检测到卸载监控文件还在,则可以确定是覆盖安装事件,与"清空数据"和"应用 卸载"区分开来。
[0047] 205、在所述目标应用进程的应用数据目录中再次生成所述卸载监控文件;
[0048] 应用监控装置在所述目标应用进程的应用数据目录(如,安卓系统中的data目 录)中再次生成所述卸载监控文件。
[0049] 在实际应用中,为了精简移动终端的存储空间,用户可以会使用一些清理应用对 系统进行"清空数据"的操作;此时,卸载监控文件可能会被删除,因此,需要在所述目标应 用进程的应用数据目录中再次生成所述卸载监控文件,以便于监控进程继续对目标应用进 程进行监控。
[0050] 206、指示所述系统中的浏览器访问所述目标应用进程的卸载调查页面。
[0051] 应用监控装置指示所述系统中的浏览器访问所述目标应用进程的卸载调查页面。
[0052] 当应用监控装置检测到所述卸载监控文件被删除时,且所述目标应用进程的安装 文件也被删除,则表示当前系统正在进行应用卸载操作,可以唤起所述目标应用进程的卸 载调查页面。
[0053] 进一步的,为了防止恶意软件禁止唤起卸载调查页面,应用监控装置可以判断所 述系统的原生浏览器是否存在,若是,则触发所述系统的原生浏览器访问所述目标应用进 程的卸载调查页面;若否,则触发所述系统的默认浏览器访问所述目标应用进程的卸载调 查页面。由于原生浏览器一般不易被恶意软件控制,因此,在原生浏览器中唤起卸载调查页 面的成功概率较高;在没有原生浏览器时,再使用系统的默认浏览器进行访问。
[0054] 在实际应用中,除了利用Linux中的inotify机制进行卸载监控外,还可以在应用 中通过后台Service中监控系统的日志文件实现。在卸载应用时,Android会输出一些标 志性的日志文件,一旦监控到这些日志文件中有目标应用的名称出现时,则认为发生卸载 事件。
[0055] 在实际应用中,为了避免出现进程重复的问题,本发明实施例也提供了相应的方 法,如:将所述第二进程的进程标识发送到java层进行存储;每当检测到所述目标应用进 程在所述系统中创建时,判断所述第二进程是否在运行,若否,则创建所述第二进程;每当 对所述目标应用进程进行版本更新时,判断所述第二进程是否在运行,若是,则删除所述第 二进程,并重新创建所述第二进程。在本发明实施例中,重新创建所述第二进程即指的是重 新触发创建监控进程的流程。
[0056] 此外,还可以在监控进程中创建一个socket (插座)字段,在需要更新数据时,父 进程与监控进程通过socket进行通信,不需要先杀死监控进程再重新创建,从而监控进程 的唯一性可以通过文件锁的机制来保证。
[0057] 上面仅以一些例子对本发明实施例中的应用场景进行了说明,可以理解的是,在 实际应用中,还可以有更多的应用场景,具体此处不作限定。
[0058] 下面对实现本发明实施例中应用监控方法的应用监控装置进行描述,请参阅图3, 本发明实施例中应用监控装置的一个实施例包括:
[0059] 第一创建单元301,用于当目标应用进程在系统中创建时,运行第一分叉函数,创 建第一进程,所述第一进程为空白进程;
[0060] 第二创建单元302,用于运行第二分叉函数,通过所述第一进程创建第二进程;所 述第二进程为所述第一进程的子进程,且为所述目标应用进程的监控进程;
[0061] 维护单元303,用于当所述第二进程创建完成,则删除所述第一进程,由所述系统 的原始进程领养所述第二进程,并由所述第二进程对所述目标应用进程进行监控。
[0062] 具体的,所述第一创建单元301用于:
[0063] 在应用配置文件中设定所述第一进程的进程标识,通过所述系统中合子zygote 进程的分叉函数机制,生成以所述进程标识命名的空白进程。
[0064] 进一步的,所述装置还包括:
[0065] 卸载监控单元304,用于在所述目标应用进程的应用数据目录中生成卸载监控文 件,并使用所述第二进程对所述卸载监控文件进行监控;当所述卸载监控文件被删除时,判 断所述目标应用进程的安装文件是否被删除,若是,则确定当前的用户行为是应用卸载;若 否,则确定当前的用户行为是数据清空。
[0066] 具体的,所述卸载监控单元304还用于:
[0067] 所述确定当前的用户行为是数据清空之后,在所述目标应用进程的应用数据目录 中再次生成所述卸载监控文件。
[0068] 所述确定当前的用户行为是应用卸载之后,指示所述系统中的浏览器访问所述目 标应用进程的卸载调查页面。
[0069] 所述指示所述系统中的浏览器访问所述目标应用进程的卸载调查页面之前,判断 所述系统的原生浏览器是否存在,若是,则触发所述系统的原生浏览器访问所述目标应用 进程的卸载调查页面;若否,则触发所述系统的默认浏览器访问所述目标应用进程的卸载 调查页面。
[0070] 进一步的,所述装置还包括:
[0071] 进程维护单元305,用于将所述第二进程的进程标识发送到java层进行存储;每 当检测到所述目标应用进程在所述系统中创建时,判断所述第二进程是否在运行,若否,则 创建所述第二进程;每当对所述目标应用进程进行版本更新时,判断所述第二进程是否在 运行,若是,则删除所述第二进程,并重新创建所述第二进程。
[0072] 上述各个单元/模块的具体操作过程请参阅方法实施例,此处不再赘述。
[0073] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法可以通过其 它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅 仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结 合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的 相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通 信连接,可以是电性,机械或其它的形式。
[0074] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显 示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个 网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目 的。
[0075] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以 是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单 元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0076] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用 时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质 上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形 式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算 机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法 的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程 序代码的介质。
[0077] 以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何 熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵 盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
【权利要求】
1. 一种应用监控方法,其特征在于,包括: 当目标应用进程在系统中创建时,运行第一分叉函数,创建第一进程,所述第一进程为 空白进程; 运行第二分叉函数,通过所述第一进程创建第二进程;所述第二进程为所述第一进程 的子进程,且为所述目标应用进程的监控进程; 当所述第二进程创建完成,则删除所述第一进程,由所述系统的原始进程领养所述第 二进程,并由所述第二进程对所述目标应用进程进行监控。
2. 根据权利要求1所述的方法,其特征在于,所述运行第一分叉函数,创建第一进程, 包括: 在应用配置文件中设定所述第一进程的进程标识,通过所述系统中合子zygote进程 的分叉函数机制,生成以所述进程标识命名的空白进程。
3. 根据权利要求1所述的方法,其特征在于,所述方法还包括: 在所述目标应用进程的应用数据目录中生成卸载监控文件,并使用所述第二进程对所 述卸载监控文件进行监控; 当所述卸载监控文件被删除时,判断所述目标应用进程的安装文件是否被删除,若是, 则确定当前的用户行为是应用卸载;若否,则确定当前的用户行为是数据清空。
4. 根据权利要求3所述的方法,其特征在于,所述确定当前的用户行为是数据清空之 后,包括: 在所述目标应用进程的应用数据目录中再次生成所述卸载监控文件。
5. 根据权利要求3所述的方法,其特征在于,所述确定当前的用户行为是应用卸载之 后,包括: 指示所述系统中的浏览器访问所述目标应用进程的卸载调查页面。
6. 根据权利要求5所述的方法,其特征在于,所述指示所述系统中的浏览器访问所述 目标应用进程的卸载调查页面之前,包括: 判断所述系统的原生浏览器是否存在,若是,则触发所述系统的原生浏览器访问所述 目标应用进程的卸载调查页面;若否,则触发所述系统的默认浏览器访问所述目标应用进 程的卸载调查页面。
7. 根据权利要求1所述的方法,其特征在于,所述通过所述第一进程创建第二进程之 后,包括: 将所述第二进程的进程标识发送到java层进行存储; 每当检测到所述目标应用进程在所述系统中创建时,判断所述第二进程是否在运行, 若否,则创建所述第二进程; 每当对所述目标应用进程进行版本更新时,判断所述第二进程是否在运行,若是,则删 除所述第二进程,并重新创建所述第二进程。
8. -种应用监控装置,其特征在于,包括: 第一创建单元,用于当目标应用进程在系统中创建时,运行第一分叉函数,创建第一进 程,所述第一进程为空白进程; 第二创建单元,用于运行第二分叉函数,通过所述第一进程创建第二进程;所述第二进 程为所述第一进程的子进程,且为所述目标应用进程的监控进程; 维护单元,用于当所述第二进程创建完成,则删除所述第一进程,由所述系统的原始进 程领养所述第二进程,并由所述第二进程对所述目标应用进程进行监控。
9. 根据权利要求8所述的装置,其特征在于,所述第一创建单元具体用于: 在应用配置文件中设定所述第一进程的进程标识,通过所述系统中合子zygote进程 的分叉函数机制,生成以所述进程标识命名的空白进程。
10. 根据权利要求8所述的装置,其特征在于,所述装置还包括: 卸载监控单元,用于在所述目标应用进程的应用数据目录中生成卸载监控文件,并使 用所述第二进程对所述卸载监控文件进行监控;当所述卸载监控文件被删除时,判断所述 目标应用进程的安装文件是否被删除,若是,则确定当前的用户行为是应用卸载;若否,则 确定当前的用户行为是数据清空。
11. 根据权利要求10所述的装置,其特征在于,所述卸载监控单元还用于:所述确定当 前的用户行为是数据清空之后,在所述目标应用进程的应用数据目录中再次生成所述卸载 监控文件。
12. 根据权利要求10所述的装置,其特征在于,所述卸载监控单元还用于:所述确定当 前的用户行为是应用卸载之后,指示所述系统中的浏览器访问所述目标应用进程的卸载调 查页面。
13. 根据权利要求12所述的装置,其特征在于,所述卸载监控单元还用于:所述指示所 述系统中的浏览器访问所述目标应用进程的卸载调查页面之前,判断所述系统的原生浏览 器是否存在,若是,则触发所述系统的原生浏览器访问所述目标应用进程的卸载调查页面; 若否,则触发所述系统的默认浏览器访问所述目标应用进程的卸载调查页面。
14. 根据权利要求8所述的装置,其特征在于,所述装置还包括: 进程维护单元,用于将所述第二进程的进程标识发送到java层进行存储;每当检测 到所述目标应用进程在所述系统中创建时,判断所述第二进程是否在运行,若否,则创建所 述第二进程;每当对所述目标应用进程进行版本更新时,判断所述第二进程是否在运行,若 是,则删除所述第二进程,并重新创建所述第二进程。
【文档编号】G06F11/30GK104156298SQ201410410679
【公开日】2014年11月19日 申请日期:2014年8月19日 优先权日:2014年8月19日
【发明者】张兴华, 甘晖明, 樊华恒, 魏庆华, 吴佳炘, 熊良建, 曾丹, 王梓茗, 林孟光 申请人:腾讯科技(深圳)有限公司