具体实施方式
在一个实施例中,如图1所示,一种显示进程信息的方法,包括:
步骤S102,获取进程信息查看请求。
进程信息查看请求为应用程序发起的请求。
在一个实施例中,可通过socket通信接口获取进程信息查看请求。例如,应用程序界面中可设置按钮,当按钮被触发时,则可获取该应用程序进程对应的进程标识,并根据进程标识生成进程信息查看请求。
在另一个实施例中,还可通过应用程序函数调用获取进程信息查看请求。例如,可预先在应用程序的启动函数中添加相应的用于生成进程查看请求的代码,当应用程序启动并调用启动函数时,可通过函数调用获取进程信息查看请求。
步骤S104,根据进程信息查看请求获取对应的进程。
在一个实施例中,可提取进程信息查看请求中的进程标识,并根据进程标识获取对应的进程。进程标识(进程ID)与进程一一对应,可在移动操作系统的进程列表中根据进程标识获取对应的进程。
在另一个实施例中,还可通过应用程序函数调用的回调函数获取对应的进程。在本实施例中,应用程序通过函数调用发起进程信息查看请求,并以可获取其自身对应的进程的回调函数作为函数调用的参数,函数调用过程中,即可通过调用该回调函数来获取进程。
例如,在ios系统中,可在应用程序的启动函数的函数定义中加入回调函数mach_task_self(),用于获取该应用程序对应的进程。
由于在某些基于沙盒模型(沙盒,sandbox,即封闭的内存空间,为保证数据安全,进程运行在一个相对封闭的内存空间即中,其它内存区域的进程或线程无法获取到该封闭内存空间中的数据)的移动操作系统中,获取进程需要一定的安全权限,因此通过应用程序函数调用获取进程信息查看请求,并通过应用程序函数调用的回调函数获取对应的进程可在进程运行于沙盒模型中时,能够安全地根据进程信息查看请求获取到对应的进程。
步骤S106,通过调用预设的库函数获取进程的进程信息。
进程信息包括应用程序运行过程中的进程对应的CPU占用率、占用的物理内存的大小、运行时长、占用的端口号等信息。移动操作系统底层的库函数中提供了获取进程信息的库函数,可通过调用库函数获取进程的进程信息。
在一个实施例中,通过调用预设的库函数获取进程的进程信息的步骤可具体为:获取进程对应的线程,通过调用预设的库函数获取所述线程对应的线程信息;根据所述线程信息生成对应的进程信息。
进程在运行时可以多线程的方式运行(非多线程方式运行时,其本身就是一个主线程)。线程信息即线程对应的CPU占用率、占用的物理内存的大小、运行时长、占用的端口号等信息。可在移动操作系统的底层获取进程对应的线程列表,并遍历该线程列表,对该列表中的线程逐一通过调用操作系统中预设的库函数来获取其对应的线程信息,然后可通过叠加每个线程对应的CPU占用率得到进程对应的CPU占用率,叠加每个线程占用的物理内存的大小得到进程占用的物理内存的大小。
步骤S108,获取进程对应的界面组件,通过界面组件展示进程信息。
在一个实施例中,可预先在进程中创建界面组件,在展示进程信息时,先获取该界面组件,并通过该界面组件展示进程信息。例如,界面组件可以是在进程对应的应用程序(即运行时为该进程的应用程序)中定义的弹出窗口(popup窗口)、状态栏组件(statebar)。可通过函数调用或socket等通信方式将进程信息传递给界面组件,然后由该界面组件展示该进程信息。
在另一个实施例中,可获取进程外部与该进程对应的界面组件。例如,进程外部与进程对应的界面组件可以是操作系统的任务栏、标题栏、状态栏,进程外部运行的插件或系统服务中创建的弹出窗口、浮动窗口等。进程外部与该进程对应的界面组件提供有访问接口,可通过函数调用或socket等通信方式将获取到的进程信息传递给进程外部的界面组件,然后由该界面组件展示该进程信息。
在一个实施例中,通过调用预设的库函数获取所述进程的进程信息的步骤之前还可根据所述进程启动进程信息查看线程。
通过调用预设的库函数获取所述进程的进程信息的步骤可具体为:通过进程信息查看线程调用预设的库函数获取进程的进程信息。
可预先将获取进程的进程信息的函数调用定义在线程对象的定义中,然后创建线程对象。在获取进程信息之前,可获取该线程对象,并启动该线程对象对应的线程。线程启动后则通过前述的函数调用定义获取进程信息。
预先启动线程,通过多线程获取进程信息的方式,不会对应用程序的运行产生阻塞,从而使得应用程序的运行更加流畅。
在一个实施例中,还可循环执行:
步骤S106(通过预设的库函数获取所述进程的进程信息)以及步骤S108(展示所述进程信息)。
可每隔预设的时间间隔(例如,每隔2秒)循环执行步骤S106、步骤S108。使得应用程序的进程信息可以实时地被获取并展示给用户,从而使用户能够更加方便地获知进程的运行情况。
进一步的,还可根据循环获取到的进程信息绘制进程信息变化曲线并展示。
通过进程信息变化曲线来展示进程信息,可方便用户获知进程的运行过程中出现的异常情况。例如,当应用程序存在内存泄漏的情况时,进程信息变化曲线中得物理内存占用大小会呈持续上升的情况,则可即时通知用户该异常。
在一个实施例中,如图2所示,音乐播放应用在启动时,通过其启动函数的函数调用发起进程信息查看请求,从而启动进程信息查看线程,该线程通过回调函数获取到音乐播放应用对应的进程,并每隔固定的时间间隔通过移动操作系统的库函数获取音乐播放应用进程的所有线程对应的线程的CPU使用率和物理内存占用大小,然后通过叠加的方式计算得到音乐播放应用进程的CPU使用率和物理内存占用大小,并刷新到展示窗口中(图2中的CPUUsage即CPU使用率,Memory即物理内存占用大小)。展示窗口上显示的数据则实时动态地反映了音乐播放应用进程的进程信息。
在一个实施例中,如图3所示,一种显示进程信息的,包括:请求获取模块102、进程获取模块104、信息获取模块106以及信息展示模块108,其中:
请求获取模块102,用于获取进程信息查看请求。
进程信息查看请求为应用程序发起的请求。
在一个实施例中,请求获取模块102可用于通过socket通信接口获取进程信息查看请求。例如,应用程序界面中可设置按钮,当按钮被触发时,则可获取该应用程序进程对应的进程标识,并根据进程标识生成进程信息查看请求。
在另一个实施例中,请求获取模块102还可用于可通过应用程序函数调用获取进程信息查看请求。例如,可预先在应用程序的启动函数中添加相应的用于生成进程查看请求的代码,当应用程序启动并调用启动函数时,可通过函数调用获取进程信息查看请求。
进程获取模块104,用于根据进程信息查看请求获取对应的进程。
在一个实施例中,进程获取模块104可用于提取进程信息查看请求中的进程标识,并根据进程标识获取对应的进程。进程标识(进程ID)与进程一一对应,可在移动操作系统的进程列表中根据进程标识获取对应的进程。
在另一个实施例中,进程获取模块104还可用于可通过应用程序函数调用的回调函数获取对应的进程。在本实施例中,应用程序通过函数调用发起进程信息查看请求,并以可获取其自身对应的进程的回调函数作为函数调用的参数,函数调用过程中,即可通过调用该回调函数来获取进程。
例如,在ios系统中,可在应用程序的启动函数的函数定义中加入回调函数mach_task_self(),用于获取该应用程序对应的进程。
由于在某些基于沙盒模型(沙盒,sandbox,即封闭的内存空间,为保证数据安全,进程运行在一个相对封闭的内存空间即中,其它内存区域的进程或线程无法获取到该封闭内存空间中的数据)的移动操作系统中,获取进程需要一定的安全权限,因此通过应用程序函数调用获取进程信息查看请求,并通过应用程序函数调用的回调函数获取对应的进程可在进程运行于沙盒模型中时,能够安全地根据进程信息查看请求获取到对应的进程。
信息获取模块106,用于通过调用预设的库函数获取进程的进程信息。
进程信息包括应用程序运行过程中的进程对应的CPU占用率、占用的物理内存的大小、运行时长、占用的端口号等信息。移动操作系统底层的库函数中提供了获取进程信息的库函数,信息获取模块106可用于通过调用库函数获取进程的进程信息。
在一个实施例中,信息获取模块106可用于获取进程对应的线程,通过调用预设的库函数获取线程对应的线程信息,根据线程信息生成对应的进程信息。
进程在运行时可以多线程的方式运行(非多线程方式运行时,其本身就是一个主线程)。线程信息即线程对应的CPU占用率、占用的物理内存的大小、运行时长、占用的端口号等信息。信息获取模块106可用于在移动操作系统的底层获取进程对应的线程列表,并遍历该线程列表,对该列表中的线程逐一通过调用操作系统中预设的库函数来获取其对应的线程信息,然后可通过叠加每个线程对应的CPU占用率得到进程对应的CPU占用率,叠加每个线程占用的物理内存的大小得到进程占用的物理内存的大小。
信息展示模块108,用于获取进程对应的界面组件,通过界面组件展示进程信息。
在一个实施例中,可预先在进程中创建界面组件,在展示进程信息时,信息展示模块108可用于获取该界面组件,并通过该界面组件展示进程信息。例如,界面组件可以是在进程对应的应用程序(即运行时为该进程的应用程序)中定义的弹出窗口(popup窗口)、状态栏组件(statebar)。信息展示模块108可用于通过函数调用或socket等通信方式将进程信息传递给界面组件,然后由该界面组件展示该进程信息。
在另一个实施例中,信息展示模块108可用于获取进程外部与该进程对应的界面组件。例如,进程外部与进程对应的界面组件可以是操作系统的任务栏、标题栏、状态栏,进程外部运行的插件或系统服务中创建的弹出窗口、浮动窗口等。进程外部与该进程对应的界面组件提供有访问接口。信息展示模块108可用于通过函数调用或socket等通信方式将获取到的进程信息传递给进程外部的界面组件,然后由该界面组件展示该进程信息。
在一个实施例中,如图4所示,显示进程信息的装置还包括线程启动模块110,用于根据进程启动进程信息查看线程。
信息获取模块106还可用于通过进程信息查看线程调用预设的库函数获取进程的进程信息。
可预先将获取进程的进程信息的函数调用定义在线程对象的定义中,然后创建线程对象线程启动模块110可用于获取该线程对象,并启动该线程对象对应的线程。线程启动后,信息获取模块106可用于通过前述的函数调用定义获取进程信息。
预先启动线程,通过多线程获取进程信息的方式,不会对应用程序的运行产生阻塞,从而使得应用程序的运行更加流畅。
在一个实施例中,如图4所示,显示进程信息的装置还包括循环调用模块112,可用于循环调用信息获取模块106和信息展示模块108。
循环调用模块112可用于每隔预设的时间间隔(例如,每隔2秒)循环调用信息获取模块106和信息展示模块108。使得应用程序的进程信息可以实时地被获取并展示给用户,从而使用户能够更加方便地获知进程的运行情况。
进一步的,信息展示模块108还可用于根据循环获取到的进程信息绘制进程信息变化曲线并展示。
通过进程信息变化曲线来展示进程信息,可方便用户获知进程的运行过程中出现的异常情况。例如,当应用程序存在内存泄漏的情况时,进程信息变化曲线中得物理内存占用大小会呈持续上升的情况,则可即时通知用户该异常。
上述显示进程信息的方法和装置,在接收到进程信息查看请求之后,通过调用移动操作系统中预设的库函数获取进程信息。和传统技术相比,可在移动终端上直接查看进程信息,而不用与外置的电脑相连,在外部通过移动终端的驱动程序的接口函数来查看,从而减少了查看时的操作,提高了操作效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。