700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 一种进程的异常状态检测方法 装置 设备及存储介质与流程

一种进程的异常状态检测方法 装置 设备及存储介质与流程

时间:2021-09-29 13:29:11

相关推荐

一种进程的异常状态检测方法 装置 设备及存储介质与流程

本申请涉及通信技术领域,尤其涉及一种进程的异常状态检测方法、装置、设备及存储介质。

背景技术:

进程是运行的程序在系统中的存在形式,一个进程在其生存期内,可处于一组不同的状态下,通过查看进程的状态信息,可以了解进程占用的系统资源情况,对系统的运行状态进行分析、调整,从而让系统保持在一个平稳的状态下运行。

例如,linux系统下的进程状态有:可执行状态r(task_running),可中断的睡眠状态s(task_interruptible),不可中断的睡眠状态d(task_uninterruptible),进程僵死状态z(task_dead-exit_zombie);其中,不可中断的睡眠状态d不是异常状态,但是长时间处于不可中断的睡眠状态d并且没有返回时,进程就处于异常状态。现有技术中对于该异常状态的检测方法主要包括两种:一种是通过ps命令(processstatus)进行多次检测,来判断进程是否长时间处于不可中断的睡眠状态d,但是该方法会造成误判,导致检测结果不准确;另一种是通过在处理线程中增加心跳机制,但是需要增加代码来支持心跳功能,增加了状态检测的工作量。

技术实现要素:

本申请所要解决的技术问题在于,提供一种进程的异常状态检测方法、装置、设备及存储介质,能够避免对进程状态的误判,并且不需要额外增加代码来实现,提高了进程状态检测的准确性和灵活性。

为了解决上述技术问题,一方面,本申请提供了一种进程的异常状态检测方法,所述方法包括:

获取待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块,所述进程控制块用于记录进程的多个字段信息,所述多个字段信息随着进程的运行进行更新;

在一个循环中,执行以下步骤:

从所述进程控制块中获取当前时刻的进程状态字段信息,基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态;

当所述待检测进程处于第一预设状态时,从所述进程控制块中获取当前时刻的切换次数字段信息;

获取当前时刻的上一时刻的切换次数字段信息;

对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述循环中的步骤,直至满足第一预设条件;

基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。

另一方面,本申请提供了一种进程的异常状态检测装置,所述装置包括:

进程控制块确定模块,用于获取待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块,所述进程控制块用于记录进程的多个字段信息,所述多个字段信息随着进程的运行进行更新;

第一预设状态判断模块,用于在一个循环中,执行以下步骤:从所述进程控制块中获取当前时刻的进程状态字段信息,基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态;

第一获取模块,用于当所述待检测进程处于第一预设状态时,从所述进程控制块中获取当前时刻的切换次数字段信息;

第二获取模块,用于获取当前时刻的上一时刻的切换次数字段信息;

重复执行模块,用于对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述循环中的步骤,直至满足第一预设条件;

进程状态确定模块,用于基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。

另一方面,本申请提供了一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述的进程的异常状态检测方法。

另一方面,本申请提供了一种计算机存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行如上述的进程的异常状态检测方法。

实施本申请实施例,具有如下有益效果:

本申请通过待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块;从所述进程控制块中获取当前时刻的进程状态字段信息,判断待检测进程是否处于第一预设状态;当所述待检测进程处于第一预设状态时,对当前时刻的切换次数字段信息和上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述步骤,直至满足第一预设条件;基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。本申请结合进程状态字段信息以及切换次数字段信息来对进程的状态进行检测,基于多维度信息的判断,避免了进程状态的误判,提高了进程状态判断的准确性;本申请中的状态检测方法不需要改造源代码,提高了进程状态检测的灵活度。

附图说明

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

图1是本申请实施例提供的实施环境示意图;

图2是本申请实施例提供的了一种进程的异常状态检测方法流程图;

图3是本申请实施例提供的一种第一预设状态判断方法流程图;

图4是本申请实施例提供的一种切换次数字段信息比对方法流程图;

图5是本申请实施例提供的一种进程状态确定方法流程图;

图6是本申请实施例提供的另一种进程的异常状态检测方法流程图;

图7是本申请实施例提供的一种进程状态检测方法流程图;

图8是本申请实施例提供的一种检测过程流程图;

图9是本申请实施例提供的一种进程的异常状态检测装置示意图;

图10是本申请实施例提供的第一预设状态判断模块示意图;

图11是本申请实施例提供的重复执行模块示意图;

图12是本申请实施例提供的进程状态确定模块示意图;

图13是本申请实施例提供的另一种进程的异常状态检测装置示意图;

图14是本申请实施例提供的进程监控模块示意图;

图15是本申请实施例提供的一种设备结构示意图。

具体实施方式

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

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

请参阅图1,其示出了一种实施环境示意图,该环境中可包括:至少一个用户终端110和服务器120,所述用户终端110和所述服务器120可通过网络进行数据通信。具体地,所述用户终端110向服务器120发送进程状态检测请求;服务器120接收进程状态检测请求,并对相应的待检测进程的状态进行检测。

所述用户终端110可以基于浏览器/服务器模式(browser/server,b/s)或客户端/服务器模式(client/server,c/s)与服务器120进行通信。所述用户终端110可以包括:智能手机、平板电脑、笔记本电脑、数字助理、智能可穿戴设备、车载终端、服务器等类型的实体设备,也可以包括运行于实体设备中的软体,例如应用程序等。本发明实施例中的用户终端110上运行的操作系统可以包括但不限于安卓系统、ios系统、linux、windows等。

所述服务器120与用户终端110可以通过有线或者无线建立通信连接,所述服务器120可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群,其中服务器可以是云端服务器。

为了解决现有技术中在检测进程异常时所存在的检测状态误判,以及需要通过增加支持心跳功能的代码来实现状态检测时所带来的工作量增加的问题,提出了一种进程的异常状态检测方法,其执行主体可以为上述图1中的服务器,具体地,请参阅图2,所述方法可包括:

s210.获取待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块,所述进程控制块用于记录进程的多个字段信息,所述多个字段信息随着进程的运行进行更新。

这里的待检测进程的进程标识符可以是基于用户的进程状态检测请求确定的,也可以是由系统主动发起的检测指令所确定的。

本申请实施例中的进程标识符对于每一个进程来说都是唯一的,内核通过进程标识符来对不同的进程进行识别。当把一个程序加载到内存中,此时就有了进程,为了方便对进程进行管理设置了进程控制块,用于记录进程的特征以及一些相关信息;进程控制块是操作系统核心的一种数据结构,主要用来表示进程的状态,它能使程序成为一个能够独立运行的基本单位,并且可以并发执行的进程。

具体地,以linux系统为例,此处采用task_stuct结构体进行说明,每个进程均对应一个task_stuct数据结构,进程运行时task_stuct数据结构会被装载到内存中并且包含着进程的信息,每个进程将它的信息放到这个数据结构体中,task_stuct结构体中的主要字段信息包括:进程状态字段信息、切换次数字段信息、调度字段信息、进程的标识符字段信息、进程通讯字段信息、时间数据字段信息等。

当进程处于正常运行状态时,该进程所对应的task_stuct结构体中的相关信息也会随着不断更新。

在一个循环中,执行以下步骤:

这里的一个循环具体可以是指一个执行周期,即对于每个进程在一个执行周期内需要执行以下步骤;在每次执行完一个循环之后,需要判断当前的相关信息是否满足第一预设条件,若不满足的话,则一直循环执行一个执行周期内的各个步骤,直至满足第一预设条件。

s220.从所述进程控制块中获取当前时刻的进程状态字段信息,基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态。

由于本申请主要针对的是在进程已经进入第一预设状态的基础上,来判断其是否处于异常状态,所以判断待检测进程是否处于第一预设状态是实施本申请状态检测方法的必要条件。通过当前时刻的进程状态字段信息可以确定所述待检测进程是否处于第一预设条件,具体地,请参阅图3,其示出了一种第一预设状态判断方法,所述进程状态字段信息包括进程状态字段名和进程状态字段值,相应地,所述方法包括:

s310.基于所述进程状态字段名从所述进程控制块获取相应的所述进程状态字段值。

s320.当所述进程状态字段值为不可中断的等待状态时,判定所述进程处于第一预设状态。

在确定了待检测进程处于第一预设状态之后,需要基于进程控制块中的切换次数字段信息进行进一步判断。

s230.当所述待检测进程处于第一预设状态时,从所述进程控制块中获取当前时刻的切换次数字段信息。

s240.获取当前时刻的上一时刻的切换次数字段信息。

本申请实施例中可设置上一时刻与当前时刻之间的时间间隔,也可称为检测周期,即每隔一个检测周期,执行一次循环中的各个步骤;由于进程的进程控制块中的各字段信息不断更新,所以对于每个当前时刻的切换次数字段信息可进行记录,以便与在下一时刻中获取的切换次数字段信息进行比对。

s250.对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述循环中的步骤,直至满足第一预设条件。

上述步骤s250中,当比对结果一致时,可以等待一个预设的时间间隔之后再重复执行上述循环中的各步骤。

请参阅图4,其示出了一种切换次数字段信息比对方法,所述切换次数字段信息包括:主动切换次数字段的字段值和被动切换次数字段的字段值,相应地,所述方法具体可包括:

s410.将当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值进行比较。

s420.将当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值进行比较。

s430.判断当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值是否一致;若是,执行步骤s440;若否,执行步骤s450。

s440.判断当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值是否一致;若是,执行步骤s460;若否,执行步骤s450。

s450.判定比对结果不一致。

s460.判定比对结果一致。

基于上述的方法,若当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值一致,且当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值一致,判定比对结果一致;若当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值不一致,或当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值不一致,判定比对结果不一致;即若当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致时,确定所述进程处于正常状态。

本申请实施例中将切换次数字段信息作为判断依据是因为通过切换次数字段信息的变化可以判定进程是否正常运行,如果进程的切换次数字段信息发生变化,说明该进程处于正常状态;如果进程的切换次数字段信息没有发生变化,则说明该进程可能处于异常状态,具体是否处于异常状态,还需要结合后续的步骤进行判断。

s260.基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。

这里的循环结束时是指:在执行了上述循环中的各步骤一次或者重复执行多次以后,当前时刻的相关信息满足了第一预设条件时,判断循环结束。

本申请实施例中的第一预设条件可以包括:当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致且重复执行的次数小于预设次数,或重复执行的次数达到预设次数,即在执行循环中的各步骤时,只需要满足上述预设条件中的一个条件时,便可结束循环。这里重复执行的次数是指执行上述的一个循环中各个步骤的次数,即执行从步骤s220~步骤s250的次数。

具体地,请参阅图5,其示出了一种进程状态确定方法,对于循环结束时所满足的条件,来确定进程当前的状态,具体地,所述方法可包括:

s510.当循环结束时满足的第一预设条件为当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致且重复执行的次数小于预设次数时,确定所述待检测进程处于正常状态。

在这种情况下,执行循环的次数没有超过预设次数就结束了循环,说明循环结束时进程控制块中切换次数字段信息相对于上一时刻发生了变化,只要切换次数字段信息有变化,则说明进程处于正常状态。

s520.当循环结束时满足的第一预设条件为重复执行的次数达到预设次数时,确定所述待检测进程处于异常状态。

在这种情况下,在执行循环的次数达到了预设次数时结束了循环,说明在执行循环过程中,进程控制块中切换次数字段信息一直没有发生变化,在切换次数字段信息没有发生变化且执行循环的次数达到了预设次数,则可判断待检测进程处于异常状态。

还有一种情况是,在执行最后一次循环时,进程控制块中的切换次数字段信息发生变化并且执行循环的次数达到了预设次数,此时可以认为待检测进程处于正常状态。

请参阅图6,其示出了另一种进程的异常状态检测方法,所述方法可包括:

s610.预先创建状态检测结果文件。

s620.当确定所述待检测进程处于异常状态时,确定所述待检测进程处于异常状态的时长。

对于检测到待检测进程处于异常状态时,其处于异常状态的时长可以为一个检测过程的时长,即执行了预设次数循环的时长以及每两个循环之间的预设时间间隔的时长总和。若在本次检测过程之前已经检测过该待检测进程,其之前已处于异常状态但没有对其进行处理,并且之前检测完成时进程控制块中的切换次数字段信息与当前检测过程结束时的切换次数字段信息相比没有发生变化,则待检测进程处于异常状态的时长为从之前开始检测时的时刻到当前时刻之间的时长。即之前没有被检测出异常的,可将当前检测过程的时长作为其处于异常状态的时长;若之前已被检测出处于异常状态时,则结合之前的检测过程与当前的检测过程来确定处于异常状态的时长。

s630.将所述待检测进程的进程标识符和处于异常状态的时长输出到所述状态检测结果文件。

将待检测进程的进程标识符和相应处于异常状态的时长作为一项记录输出到状态检测结果文件。

请参阅图7,其示出了一种进程状态检测方法,所述方法可以包括:

s710.响应于进程异常监控指令,获取所述状态检测结果文件。

s720.返回所述状态检测结果文件中各项进程的进程标识符以及相应的处于异常状态的时长。

对于被检测为处于异常状态的进程,对其检测结果会被输出到状态检测结果文件中;当需要监控异常进程时,可直接通过状态检测结果文件来获取相关异常进程状态信息。

下面以linux系统为例说明本申请的具体实施过程,但是本申请的应用场景不仅限于linux系统,还可以为安卓系统、ios系统、windows等。

在linux中,进程进入不可中断的睡眠状态d的条件是:进程发起io请求,可能是读取磁盘一个逻辑位置或者读取nfs文件系统上的文件,在io未返回之前进程会处于d状态,即等待io状态;如果io一直没返回,进程就会一直处于d状态,此时进程便处于异常状态。但是不能直接从进程处于d状态就断定进程异常,因为d状态不是异常状态,但是长时间处于d状态时进程就是异常了,很有可能是底层磁盘出现问题或者网络出现异常。

现有的进程异常检测方法主要包括以下两种:

1.通过ps命令来查看进程状态是否处于d状态。

ps命令有一列专门显示进程状态,通过多次检测,来探测进程是否长时间处于d状态;但是短时间的d状态不是异常,一个io密集型应用,大部分时间都是处于d状态,很有可能每次检测的时候都处于d状态,实际上可能是进程在频繁处理io请求,这样会造成误判。

2.进程的io线程中增加心跳机制,监控如果长时间没有收到心跳上报则认为异常。

需要增加代码来支持心跳功能,存在一定工作量,有些可能没有源代码;而且如何保证监控进程始终存活和有效也是一大难题。

在具体的实施过程中,可通过插入一个内核模块来执行进程状态的检测,同时为用户提供相关的接口以便于用户进行相关参数的设置及传入;所述内核模块的执行操作不依赖于系统中的其它模块,与操作系统最大程度的解耦。

具体地,本申请实施例通过增加一个内核模块,提供三个设置接口:待检测进程的进程标识符pid,检测次数和检测周期;(总共的探测时间=检测次数*检测周期)。

输出结果到结果文件:/proc/sys/check_proc_status_result,输出结果包含进程pid,进程进程d住了多长时间,用户监听这个文件就可以知道是否触发异常。

内核模块遍历所有的进程,根据设置的pid找到待检测进程的task_stuct,首先判断进程状态是否为task_uninterruptible,即为d状态,如果是d状态,就记录下进程主动切换cpu和被动切换cpu的次数,过了一个检测周期后再次查看,如果依旧是d状态,进程主动切换cpu和被动切换cpu的次数没有变化,则检测计数加一,重复上面的过程,如果检测计数大于等于设置的检测次数,则把进程pid和异常的时间输出到结果文件。

之所以采用主动切换次数和被动切换次数作为状态检测判断依据是因为:当进程进入d状态时,即等待io状态,进程会被放到队列中,此时进程不会发生主动切换cpu;由于队列无法接收内核信号,所以也无法发生被动切换,通过检测这两个字段信息来查看进程有无发生切换,如果长时间没有切换,说明进程一直处于等待同一个io;进程处于异常d状态时,由于没有发生cpu切换,进程的栈信息会一直保持不变。

通过多次检测来确保检测结果可靠性,预先设置好待检测进程的pid,检测间隔时长和检测次数,每一个检测过程都会执行预设检测次数的循环,具体过程可参阅图8,包括:

s810.判断待检测进程是否处于d状态(判断task_struct结构中status是否为task_uninterruptible);若是,执行步骤s820,若否,执行步骤s860。

s820.判断进程是否发生被动切换,和上次的次数是否相同(查看task_struct结构中nvcsw字段);若是,执行步骤s830,若否,执行步骤s860。

s830.判断进程是否发生被动切换,和上次的次数是否相同(task_struct结构中nivcsw字段);若是,执行步骤s840,若否,执行步骤s860。

s840.检测计数加一,判断检测计数是否查过预设检测次数;若是,执行步骤s870,若否,执行步骤s850。

s850.等待检测间隔时长。

s860.返回进程正常。

s870.返回进程异常,输出进程异常信息到结果文件。

由上述示例可知,本申请不需要改造应用源代码,可以调整检测次数和检测周期,灵活的支持检测策略;通过进程状态以及切换次数对比的多维度判断,不会出现误判,并且可以同时监控多个进程。

本申请通过待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块;从所述进程控制块中获取当前时刻的进程状态字段信息,判断待检测进程是否处于第一预设状态;当所述待检测进程处于第一预设状态时,对当前时刻的切换次数字段信息和上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述步骤,直至满足第一预设条件;基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。本申请结合进程状态字段信息以及切换次数字段信息来对进程的状态进行检测,基于多维度信息的判断,避免了进程状态的误判,提高了进程状态判断的准确性;本申请中的状态检测方法不需要改造源代码,提高了进程状态检测的灵活度。

本实施例还提供了一种进程的异常状态检测装置,请参阅图9,所述装置可包括:

进程控制块确定模块910,用于获取待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块,所述进程控制块用于记录进程的多个字段信息,所述多个字段信息随着进程的运行进行更新;

第一预设状态判断模块920,用于在一个循环中,执行以下步骤:从所述进程控制块中获取当前时刻的进程状态字段信息,基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态;

第一获取模块930,用于当所述待检测进程处于第一预设状态时,从所述进程控制块中获取当前时刻的切换次数字段信息;

第二获取模块940,用于获取当前时刻的上一时刻的切换次数字段信息;

重复执行模块950,用于对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述循环中的步骤,直至满足第一预设条件;

进程状态确定模块960,用于基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。

所述进程状态字段信息包括进程状态字段名和进程状态字段值,相应地,请参阅图10,其示出了一种第一预设状态判断模块920包括:

进程状态字段值获取模块1010,用于基于所述进程状态字段名从所述进程控制块获取相应的所述进程状态字段值;

第一判定模块1020,用于当所述进程状态字段值为不可中断的等待状态时,判定所述进程处于第一预设状态。

所述切换次数字段信息包括:主动切换次数字段的字段值和被动切换次数字段的字段值,相应地,请参阅图11,所述重复执行模块950还包括比对模块1100,所述比对模块1100包括:

第一比较模块1110,用于将当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值进行比较;

第二比较模块1120,用于将当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值进行比较;

第二判定模块1130,用于若当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值一致,且当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值一致,判定比对结果一致;

第三判定模块1140,用于若当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值不一致,或当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值不一致,判定比对结果不一致。

所述第一预设条件包括:当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致且重复执行的次数小于预设次数,或重复执行的次数达到预设次数,相应地,请参阅图12,所述进程状态确定模块960包括:

第一确定模块1210,用于当循环结束时满足的第一预设条件为当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致且重复执行的次数小于预设次数时,确定所述待检测进程处于正常状态;

第二确定模块1220,用于当循环结束时满足的第一预设条件为重复执行的次数达到预设次数时,确定所述待检测进程处于异常状态。

请参阅图13,其示出了另一种进程的异常状态检测装置,所述装置包括:

文件创建模块1310,用于预先创建状态检测结果文件;

异常状态时长确定模块1320,用于当确定所述待检测进程处于异常状态时,确定所述待检测进程处于异常状态的时长;

输出模块1330,用于将所述待检测进程的进程标识符和处于异常状态的时长输出到所述状态检测结果文件。

请参阅图14,其示出了进程监控模块1400,所述进程监控模块1400包括:

指令响应模块1410,用于响应于进程异常监控指令,获取所述状态检测结果文件;

结果返回模块1420,用于返回所述状态检测结果文件中各项进程的进程标识符以及相应的处于异常状态的时长。

上述实施例中提供的装置可执行本申请任意实施例所提供方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的方法。

本实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行如本实施例上述任一方法。

本实施例还提供了一种设备,其结构图请参见图15,该设备1500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessingunits,cpu)1522(例如,一个或一个以上处理器)和存储器1532,一个或一个以上存储应用程序1542或数据1544的存储介质1530(例如一个或一个以上海量存储设备)。其中,存储器1532和存储介质1530可以是短暂存储或持久存储。存储在存储介质1530的程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对设备中的一系列指令操作。更进一步地,中央处理器1522可以设置为与存储介质1530通信,在设备1500上执行存储介质1530中的一系列指令操作。设备1500还可以包括一个或一个以上电源1526,一个或一个以上有线或无线网络接口1550,一个或一个以上输入输出接口1558,和/或,一个或一个以上操作系统1541,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。本实施例上述的任一方法均可基于图15所示的设备进行实施。

本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤和顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或中断产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。

本实施例中所示出的结构,仅仅是与本申请方案相关的部分结构,并不构成对本申请方案所应用于其上的设备的限定,具体的设备可以包括比示出的更多或更少的部件,或者组合某些部件,或者具有不同的部件的布置。应当理解到,本实施例中所揭露的方法、装置等,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分仅仅为一种逻辑功能的划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元模块的间接耦合或通信连接。

基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域技术人员还可以进一步意识到,结合本说明书所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但这种实现不应认为超出本申请的范围。

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

技术特征:

1.一种进程的异常状态检测方法,其特征在于,包括:

获取待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块,所述进程控制块用于记录进程的多个字段信息,所述多个字段信息随着进程的运行进行更新;

在一个循环中,执行以下步骤:

从所述进程控制块中获取当前时刻的进程状态字段信息,基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态;

当所述待检测进程处于第一预设状态时,从所述进程控制块中获取当前时刻的切换次数字段信息;

获取当前时刻的上一时刻的切换次数字段信息;

对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述循环中的步骤,直至满足第一预设条件;

基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。

2.根据权利要求1所述的一种进程的异常状态检测方法,其特征在于,所述进程状态字段信息包括进程状态字段名和进程状态字段值;

相应地,所述从所述进程控制块中获取当前时刻的进程状态字段信息,基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态包括:

基于所述进程状态字段名从所述进程控制块获取相应的所述进程状态字段值;

当所述进程状态字段值为不可中断的等待状态时,判定所述进程处于第一预设状态。

3.根据权利要求1所述的一种进程的异常状态检测方法,其特征在于,所述切换次数字段信息包括:主动切换次数字段的字段值和被动切换次数字段的字段值;

相应地,所述对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对包括:

将当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值进行比较;

将当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值进行比较;

若当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值一致,且当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值一致,判定比对结果一致;

若当前时刻的主动切换次数字段的字段值与上一时刻的主动切换次数字段的字段值不一致,或当前时刻的被动切换次数字段的字段值与上一时刻的被动切换次数字段的字段值不一致,判定比对结果不一致。

4.根据权利要求1所述的一种进程的异常状态检测方法,其特征在于,所述方法还包括:

若当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致时,确定所述进程处于正常状态。

5.根据权利要求1所述的一种进程的异常状态检测方法,其特征在于,所述第一预设条件包括:当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致且重复执行的次数小于预设次数,或重复执行的次数达到预设次数;

相应地,所述基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态包括:

当循环结束时满足的第一预设条件为当前时刻的切换次数字段信息与上一时刻的切换次数字段信息的比对结果不一致且重复执行的次数小于预设次数时,确定所述待检测进程处于正常状态;

当循环结束时满足的第一预设条件为重复执行的次数达到预设次数时,确定所述待检测进程处于异常状态。

6.根据权利要求5所述的一种进程的异常状态检测方法,其特征在于,所述方法还包括:

预先创建状态检测结果文件;

当确定所述待检测进程处于异常状态时,确定所述待检测进程处于异常状态的时长;

将所述待检测进程的进程标识符和处于异常状态的时长输出到所述状态检测结果文件。

7.根据权利要求6所述的一种进程的异常状态检测方法,其特征在于,所述方法还包括:

响应于进程异常监控指令,获取所述状态检测结果文件;

返回所述状态检测结果文件中各项进程的进程标识符以及相应的处于异常状态的时长。

8.一种进程的异常状态检测装置,其特征在于,包括:

进程控制块确定模块,用于获取待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块,所述进程控制块用于记录进程的多个字段信息,所述多个字段信息随着进程的运行进行更新;

第一预设状态判断模块,用于在一个循环中,执行以下步骤:从所述进程控制块中获取当前时刻的进程状态字段信息,基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态;

第一获取模块,用于当所述待检测进程处于第一预设状态时,从所述进程控制块中获取当前时刻的切换次数字段信息;

第二获取模块,用于获取当前时刻的上一时刻的切换次数字段信息;

重复执行模块,用于对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述循环中的步骤,直至满足第一预设条件;

进程状态确定模块,用于基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。

9.一种设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至7任一项所述的进程的异常状态检测方法。

10.一种计算机存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行如权利要求1至7任一项所述的进程的异常状态检测方法。

技术总结

本申请涉及一种进程的异常状态检测方法、装置、设备及存储介质,所述方法包括:获取待检测进程的进程标识符,确定与所述进程标识符对应的进程控制块;在一个循环中,执行以下步骤:基于所述当前时刻的进程状态字段信息判断所述待检测进程是否处于第一预设状态;当所述待检测进程处于第一预设状态时,对当前时刻的切换次数字段信息与上一时刻的切换次数字段信息进行比对,当比对结果一致时,重复执行上述循环中的步骤,直至满足第一预设条件;基于循环结束时满足的所述第一预设条件,确定所述待检测进程的进程状态。本申请能够避免对进程状态的误判,并且不需要额外增加代码来实现,提高了进程状态检测的准确性和灵活性。

技术研发人员:向付晖

受保护的技术使用者:腾讯科技(深圳)有限公司

技术研发日:.11.11

技术公布日:.02.21

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。