CN116991559A - 不可中断的睡眠状态进程的退出方法和装置 - Google Patents
不可中断的睡眠状态进程的退出方法和装置 Download PDFInfo
- Publication number
- CN116991559A CN116991559A CN202311235060.7A CN202311235060A CN116991559A CN 116991559 A CN116991559 A CN 116991559A CN 202311235060 A CN202311235060 A CN 202311235060A CN 116991559 A CN116991559 A CN 116991559A
- Authority
- CN
- China
- Prior art keywords
- instruction
- sleep state
- kernel function
- exit
- response
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 588
- 230000008569 process Effects 0.000 title claims abstract description 515
- 230000004044 response Effects 0.000 claims abstract description 120
- 230000006870 function Effects 0.000 claims description 172
- 238000007781 pre-processing Methods 0.000 claims description 78
- 238000012805 post-processing Methods 0.000 claims description 30
- 238000012545 processing Methods 0.000 claims description 30
- 238000012986 modification Methods 0.000 claims description 24
- 230000004048 modification Effects 0.000 claims description 24
- 238000012544 monitoring process Methods 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 14
- 125000004122 cyclic group Chemical group 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 10
- 238000005316 response function Methods 0.000 description 4
- 101100348848 Mus musculus Notch4 gene Proteins 0.000 description 3
- 230000037237 body shape Effects 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000002035 prolonged effect Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002513 implantation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种不可中断的睡眠状态进程的退出方法、装置、计算机设备和存储介质。所述方法包括:响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;第一目标内核函数指令为待追踪替换的内核函数指令;内核函数指令为不可中断的睡眠状态进程内任意一条执行指令;响应于执行至第一目标内核函数指令,将第一目标内核函数指令替换成断点指令;执行断点指令断点跳转至执行进程退出程序,以根据进程退出程序退出不可中断的睡眠状态进程。采用本方法能够提高运行效率和适配性。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种不可中断的睡眠状态进程的退出方法、装置、计算机设备和存储介质。
背景技术
不可中断的睡眠状态(D状态,TASK_UNINTERRUPTIBLE)是Linux操作系统中的一种进程的状态。若一进程处于不可中断的睡眠状态,此时进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU(中央处理器,Central Processing Unit)不响应外部硬件的中断,而是指进程不响应异步信号。
但是,某些异常情况下IO(输入/输出,Input/Output)出现问题,则导致不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,所以需要及时退出不可中断的睡眠状态进程。然而,传统不可中断的睡眠状态进程的退出方法,存在运行效率低下或适配性较低等问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高运行效率和适配性的不可中断的睡眠状态进程的退出方法、装置、计算机设备和存储介质。
第一方面,提供一种不可中断的睡眠状态进程的退出方法,上述方法包括:
响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;第一目标内核函数指令为待追踪替换的内核函数指令;内核函数指令为不可中断的睡眠状态进程内任意一条执行指令;
响应于执行至第一目标内核函数指令,将第一目标内核函数指令替换成断点指令;
执行断点指令断点跳转至执行进程退出程序,以根据进程退出程序退出不可中断的睡眠状态进程。
在其中一个实施例中,执行进程退出程序包括:执行第一预处理子程序;其中,进程退出程序包括第一预处理子程序;第一预处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程。
在其中一个实施例中, 将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令;其中,执行进程退出程序包括:执行第二预处理子程序;其中,进程退出程序包括第二预处理子程序;第二预处理子程序包括结果修改指令;结果修改指令用于指示将不可中断的睡眠状态进程中条件判断结果修改为真;执行第一目标内核函数指令,并返回至第二目标内核函数指令进行循环处理;其中,第二目标内核函数指令为不可中断的睡眠状态进程内第一目标内核函数指令的下一条执行指令。
在其中一个实施例中,将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令;其中,执行进程退出程序包括:执行第三预处理子程序;第三预处理子程序包括空指令;执行第一目标内核函数指令;执行第一后处理子程序;其中,进程退出程序包括第三预处理子程序和第一后处理子程序;第一后处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程。
在其中一个实施例中,响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令之后还包括:执行告警指令;告警指令用于指示输出故障告警信息;故障告警信息包括故障位置信息、故障持续时间信息和故障原因信息中的一种或多种。
在其中一个实施例中,确定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,包括:对当前进程的响应进行监控处理,得到监控处理结果;根据监控处理结果确定进程响应延长时长;获取当前进程的进程状态;响应于进程状态为不可中断的睡眠状态,判断进程响应延长时长是否大于时长阈值;在进程响应延长时长大于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值。
在其中一个实施例中,确定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,还包括:在进程响应延长时长小于或等于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长小于或等于时长阈值。
在其中一个实施例中,对当前进程的响应进行监控,并确定进程响应延长时长,包括:通过植入的跟踪函数统计进程响应延长时长。
在其中一个实施例中,获取当前进程的进程状态,包括:获取当前进程的状态标志位;根据状态标志位确定进程状态。
在其中一个实施例中,上述方法还包括:响应于完成退出不可中断的睡眠状态进程,返回至不可中断的睡眠状态进程的下一个进程。
在其中一个实施例中,上述方法还包括:响应于对进程退出程序的设置操作,根据设置操作的结果生成进程退出程序。
在其中一个实施例中,将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令;
其中,执行进程退出程序包括:执行第一预处理子程序或者第二预处理子程序;其中,进程退出程序包括第一预处理子程序或者第二预处理子程序;第一预处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程;第二预处理子程序包括结果修改指令;结果修改指令用于指示将不可中断的睡眠状态进程中条件判断结果修改为真;执行第一目标内核函数指令;执行第一后处理子程序;其中,进程退出程序还包括第一后处理子程序;第一后处理子程序包括进程退出指令;响应于退出不可中断的睡眠状态进程,返回至第二目标内核函数指令进行循环处理;第二目标内核函数指令为不可中断的睡眠状态进程内第一目标内核函数指令的下一条执行指令。
第二方面,提供了不可中断的睡眠状态进程的退出装置,所述装置包括:指令定位模块、执行替换模块和进程退出模块。
其中,指令定位模块用于响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;第一目标内核函数指令为待追踪替换的内核函数指令;内核函数指令为不可中断的睡眠状态进程内任意一条执行指令;执行替换模块用于响应于执行至第一目标内核函数指令,将第一目标内核函数指令替换成断点指令;进程退出模块用于执行断点指令断点跳转至执行进程退出程序,以根据进程退出程序退出不可中断的睡眠状态进程。
第三方面,提供了一种计算机设备,该计算机设备包括存储器和处理器,存储器存储有计算机程序,处理器执行所述计算机程序时实现上述方法实施例中任一方法的步骤。
第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例中任一方法的步骤。
上述不可中断的睡眠状态进程的退出方法、装置、计算机设备和存储介质,响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;第一目标内核函数指令为待追踪替换的内核函数指令;内核函数指令为不可中断的睡眠状态进程内任意一条执行指令;而后,响应于执行至第一目标内核函数指令,将第一目标内核函数指令替换成断点指令;接着,根据断点指令断点跳转至执行进程退出程序,以根据进程退出程序退出不可中断的睡眠状态进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。
附图说明
图1为一个具体示例中第一传统D状态进程的退出方法的流程示意图;
图2为一个具体示例中第二传统D状态进程的退出方法的流程示意图;
图3为一个具体示例中D状态进程的处理流程的流程示意图;
图4为一个实施例中不可中断的睡眠状态进程的退出方法的应用环境图;
图5为一个实施例中不可中断的睡眠状态进程的退出方法的第一流程示意图;
图6为一个实施例中确定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值的流程示意图;
图7为一个实施例中获取当前进程的进程状态的流程示意图;
图8为一个实施例中不可中断的睡眠状态进程的退出方法的第二流程示意图;
图9为一个实施例中不可中断的睡眠状态进程的退出方法的第三流程示意图;
图10为一个具体示例中不可中断的睡眠状态进程的退出方法的流程示意图;
图11为一个实施例中不可中断的睡眠状态进程的退出装置的结构框图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的实施例。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使本申请的公开内容更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本申请的范围的情况下,可以将第一电阻称为第二电阻,且类似地,可将第二电阻称为第一电阻。第一电阻和第二电阻两者都是电阻,但其不是同一电阻。
可以理解,以下实施例中的“连接”,如果被连接的电路、模块、单元等相互之间具有电信号或数据的传递,则应理解为“电连接”、“通信连接”等。
在此使用时,单数形式的“一”、“一个”和“所述/该”也可以包括复数形式,除非上下文清楚指出另外的方式。还应当理解的是,术语“包括/包含”或“具有”等指定所陈述的特征、整体、步骤、操作、组件、部分或它们的组合的存在,但是不排除存在或添加一个或更多个其他特征、整体、步骤、操作、组件、部分或它们的组合的可能性。
需要说明的是:在本文中提及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
在对本申请进行具体说明之前,对本申请涉及的术语和传统技术作如下解释:
Linux系统下进程常见的4种运行状态包括R状态、S状态、Z状态和D状态。其中,R状态是指程序正在运行或者是在等待运行的队列中;S状态是指处于休眠状态的进程,等待触发事件;Z状态是指程序已经终止,等待父进程回收,这种进程不再占用内存和CPU。
具体地,D状态(不可中断的睡眠状态,TASK_UNINTERRUPTIBLE)是Linux操作系统中的一种进程的状态。若一进程处于D状态,此时进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU(中央处理器,Central Processing Unit)不响应外部硬件的中断,而是指进程不响应异步信号。此外,D状态通常与等待来自硬件(如硬盘)的数据有关。
可以理解的是,D状态存在的意义就在于,内核的某些处理流程是不能被打断的,如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程(这个插入的流程可能只存在于内核态,也可能延伸到用户态),于是原有的流程就被中断了。在进程对某些硬件进行操作时(比如进程调用读取系统调用对某个设备文件进行读操作,而读系统调用最终执行到对应设备驱动的代码,并与对应的物理设备进行交互),可能需要使用D状态对进程进行保护,以避免进程与设备交互的过程被打断,造成设备陷入不可控的状态。
其中,IO(Input/Output,输入/输出):分为IO设备和IO接口两个部分。在POSIX(Portable Operating System Interface of UNIX,便携式操作系统接口)兼容的系统上,例如Linux系统,I/O操作可以有多种方式,比如DIO(Direct I/O,直接I/O),AIO(Asynchronous I/O,异步I/O),Memory-Mapped I/O(内存映射I/O)等,不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。
可以理解的是,处于D状态进程通常是在等待IO,比如磁盘IO,网络IO,其他外设IO等。通常情况下,进程处于D状态的时间较短。若进程处于D状态的时间较长,意味着很有可能有IO出了问题,例如,可能是外设本身出了故障,也可能是比如挂载的远程文件系统已经不可访问了。
具体地,对于处于D状态进程通过kill -9 无法强制退出,目前没有较好应对办法。对于现有技术或手段,由于进程处在D状态一直等待 I/O 资源导致无法正常工作,通常只能等待IO资源恢复可用来退出D状态进程。在出现网络IO问题情况下,通常只能等待修复网络状况后退出D状态进程;在磁盘、外设等IO设备故障且无法修复的情况下,则只能通过reboot重启系统的方式来退出D状态。上述传统D状态进程的退出方法都耗时较长或影响其他业务进程。
在一个具体示例中,Linux系统为了便于发现并统计D状态进程这类情况设计出了hung task机制,专门用于检测长时间处于D状态进程并发出告警。如图1所示,第一传统D状态进程的退出方法,其核心思想为创建一个内核监测进程循环监测处于D状态进程,统计它们在两次检测之间的调度次数,如果发现有任务在两次监测之间没有发生任何的调度则可判断该进程一直处于D状态进程,很有可能已经出现IO异常或故障,因此触发报警日志打印,输出进程的基本信息,栈回溯以及寄存器保存信息以供内核开发人员定位。但是,第一传统D状态进程的退出方法仅方便解决出现定位问题的IO设备的D状态进程的退出,当IO设备或网络状态无法恢复,D状态进程依然无法退出即不能正常工作,所以第一传统D状态进程的退出方法的使用范围相当局限,适配性较低。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
在一个具体示例中,如图2所示,第二传统D状态进程的退出方法,通过为程序注入内核模块,将进程由不可中断状态改为可中断状态。在程序注入内核模块时提供D状态进程的进程号,就可以将其转换为stopped状态、running状态或可中断状态。此时可通过wakeup的内核函数唤醒进程或使用kill发送信号让程序退出。但是,第二传统D状态进程的退出方法的使用范围相当局限,仅在一些旧版本内核系统下才能发挥作用,适配性较低。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
在一个具体示例中,Linux系统对D状态进程的处理流程如图3所示,其实现原理是首先进入死循环中;然后设置当前状态为D状态;接着判断条件是否满足;而后在判断条件满足时即可退出D状态进程;同时,在判断条件并未满足时则返回进入死循环中。也就是说,在判断条件为IO等资源是否恢复的情况下,在一个死循环里一直监测等待IO等资源恢复,否则不退出。上述第二传统D状态进程的退出方法,可以浅显的认为D状态进程不接收kill等发出的中断退出信号,那就强制改变进程状态至可接收信息。但通过对D状态进程本质的分析,强制改变进程状态后,进程依然在死循环里判断IO等资源是否恢复,在并未恢复的情况下依旧会被设置为D状态。所以上述第二传统D状态进程的退出方法不能达到期望的效果,本申请所提出的方法旨在解决该问题。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
本申请提供的不可中断的睡眠状态进程的退出方法,可以应用于如图4所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图5所示,提供了一种不可中断的睡眠状态进程的退出方法,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤502至步骤506。
步骤502,响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令。
其中,第一目标内核函数指令为待追踪替换的内核函数指令;内核函数指令为不可中断的睡眠状态进程内任意一条执行指令。具体地,不可中断的睡眠状态进程是指进程状态为不可中断的睡眠状态的进程。进程响应延长时长是指不可中断的睡眠状态进程的进程响应延长时长。
在一个具体示例中,时长阈值可以但不限于是120S,以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
具体地,服务器104在识别到处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值时,从而可以确定待追踪替换的内核函数指令,即确定第一目标内核函数指令。
在一个具体示例中,内核函数指令可以但不限于是图3中的任意一条执行指令。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
在其中一个实施例中,如图6所示,确定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,包括步骤601至步骤606。
步骤601,对当前进程的响应进行监控处理,得到监控处理结果。
步骤602,根据监控处理结果确定进程响应延长时长。
步骤603,获取当前进程的进程状态。
步骤604,响应于进程状态为不可中断的睡眠状态,判断进程响应延长时长是否大于时长阈值。
步骤605,在进程响应延长时长大于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值。
步骤606,在进程响应延长时长小于或等于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长小于或等于时长阈值。
其中,当前进程的进程状态包括R状态、S状态、Z状态和D状态等。具体地,服务器104对当前进程的响应进行监控处理,得到监控处理结果;而后,根据监控处理结果确定进程响应延长时长;接着,获取当前进程的进程状态;然后,响应于进程状态为不可中断的睡眠状态,判断进程响应延长时长是否大于时长阈值;最后,在进程响应延长时长大于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值;同时,在进程响应延长时长小于或等于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长小于或等于时长阈值。
在本实施例中,对当前进程的响应进行监控处理,得到监控处理结果;而后,根据监控处理结果确定进程响应延长时长;接着,获取当前进程的进程状态;然后,响应于进程状态为不可中断的睡眠状态,判断进程响应延长时长是否大于时长阈值;最后,在进程响应延长时长大于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值;同时,在进程响应延长时长小于或等于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长小于或等于时长阈值。也就是说,通过上述步骤可以提高确定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值的效率和便利性,也就能够提高不可中断的睡眠状态进程的退出方法的运行效率和便利性。
在其中一个实施例中,对当前进程的响应进行监控,并确定进程响应延长时长,包括:通过植入的跟踪函数统计进程响应延长时长。
具体地,服务器104通过植入的跟踪函数统计进程响应延长时长,从而提高了对当前进程的响应进行监控的效率,也就能够提高确定进程响应延长时长的效率和便利性。
在本实施例中,通过植入的跟踪函数统计进程响应延长时长,从而提高了对当前进程的响应进行监控的效率,也就能够提高确定进程响应延长时长的效率和便利性。
在其中一个实施例中,如图7所示,获取当前进程的进程状态,包括步骤701和步骤702。
步骤701,获取当前进程的状态标志位。
步骤702,根据状态标志位确定进程状态。
具体地,服务器104获取当前进程的状态标志位;而后,即可根据状态标志位确定进程状态,从而能够准确的获取当前进程的进程状态,提高了获取当前进程的进程状态的效率和便利性。
在本实施例中,获取当前进程的状态标志位;而后,即可根据状态标志位确定进程状态,从而能够准确的获取当前进程的进程状态,提高了获取当前进程的进程状态的效率和便利性。
步骤504,响应于执行至第一目标内核函数指令,将第一目标内核函数指令替换成断点指令。
其中,断点指令用于指示断点跳转至执行进程退出程序。具体地,断点指令是利用Linux系统中内核断点调试机制,断住被替换的第一目标内核函数指令,从而断点跳转至执行进程退出程序,从而能够实现通过进程退出程序快速退出不可中断的睡眠状态进程。
可以理解的是,服务器104在识别到执行至第一目标内核函数指令时,即可将第一目标内核函数指令替换成断点指令,从而实现断点跳转至执行进程退出程序。
在一个具体示例中,断点指令为x86平台中的int3指令,也就是说可以通过x86平台将断点指令设置为int3指令。断点指令为arm平台中的自定义断点跳转指令,也就是说通过arm平台设置为自定义断点跳转指令,以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
步骤506,执行断点指令断点跳转至执行进程退出程序,以根据进程退出程序退出不可中断的睡眠状态进程。
具体地,服务器104执行断点指令断点跳转至执行进程退出程序,从而即可执行进程退出程序退出之后即可退出不可中断的睡眠状态进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。此外,由于本申请中采取断点指令断点直接跳转至执行进程退出程序,从而根据进程退出程序退出不可中断的睡眠状态进程,也就避免了第二传统D状态进程的退出方法中出现的强制改变进程状态之后进程依然在死循环里判断IO等资源是否恢复,在并未恢复的情况下依旧会被设置为D状态的问题。
基于此,上述不可中断的睡眠状态进程的退出方法,通过响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;第一目标内核函数指令为待追踪替换的内核函数指令;内核函数指令为不可中断的睡眠状态进程内任意一条执行指令;而后,响应于执行至第一目标内核函数指令,将第一目标内核函数指令替换成断点指令;接着,执行断点指令断点跳转至执行进程退出程序,以根据进程退出程序退出不可中断的睡眠状态进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。
在其中一个实施例中,如图8所示,执行进程退出程序包括步骤801。
步骤801,执行第一预处理子程序。
其中,进程退出程序包括第一预处理子程序;第一预处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程。具体地,服务器104执行包括进程退出指令的第一预处理子程序,从而实现直接退出不可中断的睡眠状态进程。
在一个具体示例中,第一预处理子程序可以但不限于是内核响应函数即notifier_call_chain函数中注册的pre_handler函数,通过将用于指示直接退出不可中断的睡眠状态进程的进程退出指令直接植入pre_handler函数,即可实现执行包括进程退出指令的第一预处理子程序,即可直接退出不可中断的睡眠状态进程。其中,注册的pre_handler函数的注册信息和保存的寄存器信息可以作为pre_handler函数的参数。上述注册信息通过结构体形态保存。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
在本实施例中,执行包括进程退出指令的第一预处理子程序,从而实现直接退出不可中断的睡眠状态进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。
在其中一个实施例中, 将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令。
具体地,服务器104暂存第一目标内核函数指令,从而避免将第一目标内核函数指令替换成断点指令造成第一目标内核函数指令的数据丢失,便于后续使用或继续执行第一目标内核函数指令。
其中,如图8所示,执行进程退出程序包括步骤802和步骤803。
步骤802,执行第二预处理子程序。
其中,进程退出程序包括第二预处理子程序;第二预处理子程序包括结果修改指令;结果修改指令用于指示将不可中断的睡眠状态进程中条件判断结果修改为真。具体地,服务器104执行包括结果修改指令的第二预处理子程序,从而实现将不可中断的睡眠状态进程中条件判断结果修改为真。
在一个具体示例中,第二预处理子程序可以但不限于是内核响应函数即notifier_call_chain函数中注册的pre_handler函数,通过将用于指示将不可中断的睡眠状态进程中条件判断结果修改为真直接植入pre_handler函数,即可直接将条件判断结果修改为真。其中,注册的pre_handler函数的注册信息和保存的寄存器信息可以作为pre_handler函数的参数。上述注册信息通过结构体形态保存。具体地,可以通过修改寄存器中对应的状态值来实现将条件判断结果修改为真。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
步骤803,执行第一目标内核函数指令,并返回至第二目标内核函数指令进行循环处理。
其中,第二目标内核函数指令为不可中断的睡眠状态进程内第一目标内核函数指令的下一条执行指令。具体地,服务器104执行包括结果修改指令的第二预处理子程序,从而实现将不可中断的睡眠状态进程中条件判断结果修改为真;而后,再执行第一目标内核函数指令,并返回至第二目标内核函数指令进行循环处理。可以理解的是,将不可中断的睡眠状态进程中条件判断结果修改为真也就是说D状态进程的处理流程中判断条件已经满足,从而此时可以通过D状态进程的处理流程中在判断条件满足时即可自动退出D状态进程来实现不可中断的睡眠状态进程的退出,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。
在本实施例中,执行包括结果修改指令的第二预处理子程序,从而实现将不可中断的睡眠状态进程中条件判断结果修改为真;而后,再执行第一目标内核函数指令,并返回至第二目标内核函数指令进行循环处理,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。
在其中一个实施例中,将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令。
具体地,服务器104暂存第一目标内核函数指令,从而避免将第一目标内核函数指令替换成断点指令造成第一目标内核函数指令的数据丢失,便于后续使用或继续执行第一目标内核函数指令。
其中,如图8所示,执行进程退出程序包括步骤804至步骤806。
步骤804,执行第三预处理子程序。
步骤805,执行第一目标内核函数指令。
步骤806,执行第一后处理子程序。
其中,第三预处理子程序包括空指令;进程退出程序包括第三预处理子程序和第一后处理子程序;第一后处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程。
具体地,服务器104可以执行包括空指令的第三预处理子程序;而后,执行第一目标内核函数指令;接着,执行包括进程退出指令第一后处理子程序,从而实现直接退出不可中断的睡眠状态进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。
在一个具体示例中,第三预处理子程序可以但不限于是内核响应函数即notifier_call_chain函数中注册的pre_handler函数,第一后处理子程序可以但不限于是内核响应函数即notifier_call_chain函数中注册的post_handler函数,通过将用于指示直接退出不可中断的睡眠状态进程的进程退出指令直接植入post_handler函数,即可实现执行包括进程退出指令的第一后处理子程序,即可直接退出不可中断的睡眠状态进程。其中,注册的pre_handler函数的注册信息和保存的寄存器信息可以作为pre_handler函数的参数。上述注册信息通过结构体形态保存。具体地,可以通过修改寄存器中对应的状态值来实现将条件判断结果修改为真。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
在本实施例中,通过执行第三预处理子程序;而后,执行第一目标内核函数指令;接着,执行第一后处理子程序,从而实现直接退出不可中断的睡眠状态进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程,降低了不可中断的睡眠状态进程的耗时,也就提高了运行效率。同时,上述各步骤并未限制使用平台的版本以及具体应用环境和应用场景,从而也就提高了不可中断的睡眠状态进程的退出方法的适配性。
在其中一个实施例中,将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令;
其中,执行进程退出程序包括:
执行第一预处理子程序或者第二预处理子程序;其中,进程退出程序包括第一预处理子程序、第二预处理子程序或者第三预处理子程序;第一预处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程;第二预处理子程序包括结果修改指令;结果修改指令用于指示将不可中断的睡眠状态进程中条件判断结果修改为真;
执行第一目标内核函数指令;
执行第一后处理子程序;其中,进程退出程序还包括第一后处理子程序;第一后处理子程序包括进程退出指令;
响应于退出不可中断的睡眠状态进程,返回至第二目标内核函数指令进行循环处理;第二目标内核函数指令为不可中断的睡眠状态进程内第一目标内核函数指令的下一条执行指令。
具体地,服务器104执行在将第一目标内核函数指令替换成断点指令之前暂存第一目标内核函数指令;而后,执行第一预处理子程序或者第二预处理子程序;其中,进程退出程序包括第一预处理子程序或者第二预处理子程序;第一预处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程;第二预处理子程序包括结果修改指令;结果修改指令用于指示将不可中断的睡眠状态进程中条件判断结果修改为真;第三预处理子程序包括空指令;接着,执行第一目标内核函数指令;然后,执行第一后处理子程序;其中,进程退出程序还包括第一后处理子程序;第一后处理子程序包括进程退出指令;同时,响应于退出不可中断的睡眠状态进程,返回至第二目标内核函数指令进行循环处理;第二目标内核函数指令为不可中断的睡眠状态进程内第一目标内核函数指令的下一条执行指令。
在本实施例中,通过执行第一预处理子程序或者第二预处理子程序;而后,执行第一目标内核函数指令;接着,执行第一后处理子程序;同时,响应于退出不可中断的睡眠状态进程,返回至第二目标内核函数指令进行循环处理;第二目标内核函数指令为不可中断的睡眠状态进程内第一目标内核函数指令的下一条执行指令,也就确保根据进程退出程序能够完全退出不可中断的睡眠状态进程,提高了不可中断的睡眠状态进程的退出方法的容错性。
在其中一个实施例中,如图9所示,响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令之后还包括步骤901。
步骤901,执行告警指令。
其中,告警指令用于指示输出故障告警信息;故障告警信息包括故障位置信息、故障持续时间信息和故障原因信息中的一种或多种。可以理解的是,故障位置信息用于表征硬件资源或I0资源的故障位置;故障持续时间信息用于表征硬件资源或I0资源出现故障的持续时间;故障原因信息用于表征硬件资源或I0资源出现故障的原因。
具体地,服务器104执行告警指令,从而可以通过输出故障告警信息及时了解故障位置信息、故障持续时间信息和故障原因信息中的一种或多种,从而便于故障调试分析。
在一个具体示例中,告警指令可以植入上述第一预处理子程序,也可以第二预处理子程序,还可以第三预处理子程序或第一后处理子程序,也可以实现通过输出故障告警信息及时了解故障位置信息、故障持续时间信息和故障原因信息中的一种或多种的效果,从而便于故障调试分析,以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。
在本实施例中,通过执行告警指令,从而可以通过输出故障告警信息及时了解故障位置信息、故障持续时间信息和故障原因信息中的一种或多种,从而便于故障调试分析。
在其中一个实施例中,上述方法还包括:
响应于完成退出不可中断的睡眠状态进程,返回至不可中断的睡眠状态进程的下一个进程。
具体地,服务器104在识别到完成退出不可中断的睡眠状态进程时,即可返回至不可中断的睡眠状态进程的下一个进程,从而可以及时启动不可中断的睡眠状态进程的下一个进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程。
在本实施例中,通过响应于完成退出不可中断的睡眠状态进程,返回至不可中断的睡眠状态进程的下一个进程,从而可以及时启动不可中断的睡眠状态进程的下一个进程,从而避免不可中断的睡眠状态进程较长时间等待IO响应而无法启动新进程。
在其中一个实施例中,上述方法还包括:
响应于对进程退出程序的设置操作,根据设置操作的结果生成进程退出程序。
具体地,工作人员可以通过服务器104执行对进程退出程序的设置操作;服务器104在识别到响应于对进程退出程序的设置操作,根据设置操作的结果生成进程退出程序,从而提高了进程退出程序的生成效率和便利性。
在本实施例中,通过响应于对进程退出程序的设置操作,根据设置操作的结果生成进程退出程序,从而提高了进程退出程序的生成效率和便利性。
应该理解的是,虽然图5-图9的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图5-图9中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个具体示例中,如图10所示,首先将判断条件“if (XXX == true) break”作为第一目标内核函数指令,即待追踪替换的内核函数指令;而后,采用断点指令来取代第一目标内核函数指令的前几个字节;此时,断点指令可以但不限于是x86平台中的int3指令;可以理解的是,CPU(中央处理器,Central Processing Unit)执行到第一目标内核函数指令时,实际上将执行断点指令,从而实现断点跳转至执行进程退出程序。具体地,断点跳转至执行进程退出程序将导致CPU的寄存器信息入栈保存,并调用到notifier_call_chain函数。
在notifier_call_chain函数被执行时,将先执行notifier_call_chain函数中注册的pre_handler函数,并把注册的pre_handler函数的注册信息和保存的寄存器信息可以作为pre_handler函数的参数;然后,执行第一目标内核函数指令;接着,执行notifier_call_chain函数中注册的post_handler函数;最后,返回至“Schedule()”,即不可中断的睡眠状态进程的下一个进程。以上仅为具体示例,实际应用中可以根据需求而灵活设置,在此不进行限制。第二方面,如图11所示,提供了不可中断的睡眠状态进程的退出装置,所述装置包括:指令定位模块1010、执行替换模块1020和进程退出模块1030。
其中,指令定位模块1010用于响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;第一目标内核函数指令为待追踪替换的内核函数指令;内核函数指令为不可中断的睡眠状态进程内任意一条执行指令;执行替换模块1020用于响应于执行至第一目标内核函数指令,将第一目标内核函数指令替换成断点指令;进程退出模块1030用于执行断点指令断点跳转至执行进程退出程序,以根据进程退出程序退出不可中断的睡眠状态进程。
在其中一个实施例中,进程退出模块1030包括第一进程退出单元。
其中,第一进程退出单元用于执行第一预处理子程序;其中,进程退出程序包括第一预处理子程序;第一预处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程。
在其中一个实施例中, 将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令;其中,进程退出模块1030包括第二进程退出单元。
其中,第二进程退出单元用于执行第二预处理子程序;其中,进程退出程序包括第二预处理子程序;第二预处理子程序包括结果修改指令;结果修改指令用于指示将不可中断的睡眠状态进程中条件判断结果修改为真;第二进程退出单元用于执行第一目标内核函数指令,并返回至第二目标内核函数指令进行循环处理;其中,第二目标内核函数指令为不可中断的睡眠状态进程内第一目标内核函数指令的下一条执行指令。
在其中一个实施例中,将第一目标内核函数指令替换成断点指令之前还包括:暂存第一目标内核函数指令;其中,进程退出模块1030包括第三进程退出单元。
第三进程退出单元用于执行第三预处理子程序;第三预处理子程序包括空指令;第三进程退出单元用于执行第一目标内核函数指令;第三进程退出单元用于执行第一后处理子程序;其中,进程退出程序包括第三预处理子程序和第一后处理子程序;第一后处理子程序包括进程退出指令;进程退出指令用于指示直接退出不可中断的睡眠状态进程。
在其中一个实施例中,上述装置还包括告警模块。
其中,告警模块用于执行告警指令;告警指令用于指示输出故障告警信息;故障告警信息包括故障位置信息、故障持续时间信息和故障原因信息中的一种或多种。
在其中一个实施例中,指令定位模块1010包括状态判定单元。
其中,状态判定单元用于对当前进程的响应进行监控处理,得到监控处理结果;状态判定单元用于根据监控处理结果确定进程响应延长时长;状态判定单元用于获取当前进程的进程状态;状态判定单元用于响应于进程状态为不可中断的睡眠状态,判断进程响应延长时长是否大于时长阈值;状态判定单元用于在进程响应延长时长大于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值;状态判定单元用于在进程响应延长时长小于或等于时长阈值的情况下,则判定处于不可中断的睡眠状态进程且进程响应延长时长小于或等于时长阈值。
在其中一个实施例中,状态判定单元包括时长统计器。
其中,时长统计器用于通过植入的跟踪函数统计进程响应延长时长。
在其中一个实施例中,状态判定单元包括进程状态获取器。
其中,进程状态获取器用于获取当前进程的状态标志位;进程状态获取器用于根据状态标志位确定进程状态。
在其中一个实施例中,上述装置还包括进程重启模块。
其中,进程重启模块用于响应于完成退出不可中断的睡眠状态进程,返回至不可中断的睡眠状态进程的下一个进程。
在其中一个实施例中,上述装置还包括程序生成模块。
其中,程序生成模块用于响应于对进程退出程序的设置操作,根据设置操作的结果生成进程退出程序。
关于不可中断的睡眠状态进程的退出装置的具体限定可以参见上文中对于不可中断的睡眠状态进程的退出方法的限定,在此不再赘述。上述不可中断的睡眠状态进程的退出装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储进程退出程序。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种不可中断的睡眠状态进程的退出方法。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
第三方面,提供了一种计算机设备,该计算机设备包括存储器和处理器,存储器存储有计算机程序,处理器执行所述计算机程序时实现上述方法实施例中任一方法的步骤。
第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例中任一方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种不可中断的睡眠状态进程的退出方法,所述方法包括:
响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;所述第一目标内核函数指令为待追踪替换的内核函数指令;所述内核函数指令为所述不可中断的睡眠状态进程内任意一条执行指令;
响应于执行至所述第一目标内核函数指令,将所述第一目标内核函数指令替换成断点指令;
执行所述断点指令断点跳转至执行进程退出程序,以根据所述进程退出程序退出所述不可中断的睡眠状态进程。
2.根据权利要求1所述的方法,其特征在于,所述执行进程退出程序包括:
执行第一预处理子程序;其中,所述进程退出程序包括所述第一预处理子程序;所述第一预处理子程序包括进程退出指令;所述进程退出指令用于指示直接退出所述不可中断的睡眠状态进程。
3.根据权利要求1所述的方法,其特征在于,所述将所述第一目标内核函数指令替换成断点指令之前还包括:暂存所述第一目标内核函数指令;
其中,所述执行进程退出程序包括:
执行第二预处理子程序;其中,所述进程退出程序包括所述第二预处理子程序;所述第二预处理子程序包括结果修改指令;所述结果修改指令用于指示将所述不可中断的睡眠状态进程中条件判断结果修改为真;
执行所述第一目标内核函数指令,并返回至第二目标内核函数指令进行循环处理;其中,所述第二目标内核函数指令为所述不可中断的睡眠状态进程内所述第一目标内核函数指令的下一条执行指令。
4.根据权利要求1所述的方法,其特征在于,所述将所述第一目标内核函数指令替换成断点指令之前还包括:暂存所述第一目标内核函数指令;
其中,所述执行进程退出程序包括:
执行第三预处理子程序;所述第三预处理子程序包括空指令;
执行所述第一目标内核函数指令;
执行第一后处理子程序;其中,所述进程退出程序包括所述第三预处理子程序和所述第一后处理子程序;所述第一后处理子程序包括进程退出指令;所述进程退出指令用于指示直接退出所述不可中断的睡眠状态进程。
5.根据权利要求1至4任意一项所述的方法,其特征在于,所述响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令之后还包括:
执行告警指令;所述告警指令用于指示输出故障告警信息;所述故障告警信息包括故障位置信息、故障持续时间信息和故障原因信息中的一种或多种。
6.根据权利要求1所述的方法,其特征在于,确定所述处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,包括:
对当前进程的响应进行监控处理,得到监控处理结果;
根据所述监控处理结果确定所述进程响应延长时长;
获取当前进程的进程状态;
响应于所述进程状态为不可中断的睡眠状态,判断所述进程响应延长时长是否大于所述时长阈值;
在所述进程响应延长时长大于所述时长阈值的情况下,则判定所述处于所述不可中断的睡眠状态进程且所述进程响应延长时长大于所述时长阈值。
7.根据权利要求6所述的方法,其特征在于,确定所述处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,还包括:
在所述进程响应延长时长小于或等于所述时长阈值的情况下,则判定处于所述不可中断的睡眠状态进程且所述进程响应延长时长小于或等于所述时长阈值。
8.根据权利要求6所述的方法,其特征在于,所述对当前进程的响应进行监控,并确定所述进程响应延长时长,包括:
通过植入的跟踪函数统计所述进程响应延长时长。
9.根据权利要求6所述的方法,其特征在于,所述获取当前进程的进程状态,包括:
获取所述当前进程的状态标志位;
根据所述状态标志位确定所述进程状态。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于完成退出所述不可中断的睡眠状态进程,返回至所述不可中断的睡眠状态进程的下一个进程。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于对所述进程退出程序的设置操作,根据所述设置操作的结果生成所述进程退出程序。
12.根据权利要求1所述的方法,其特征在于,所述将所述第一目标内核函数指令替换成断点指令之前还包括:暂存所述第一目标内核函数指令;
其中,所述执行进程退出程序包括:
执行第一预处理子程序或者第二预处理子程序;其中,所述进程退出程序包括所述第一预处理子程序或者所述第二预处理子程序;所述第一预处理子程序包括进程退出指令;所述进程退出指令用于指示直接退出所述不可中断的睡眠状态进程;所述第二预处理子程序包括结果修改指令;所述结果修改指令用于指示将所述不可中断的睡眠状态进程中条件判断结果修改为真;执行所述第一目标内核函数指令;
执行第一后处理子程序;其中,所述进程退出程序还包括所述第一后处理子程序;所述第一后处理子程序包括所述进程退出指令;
响应于退出不可中断的睡眠状态进程,返回至第二目标内核函数指令进行循环处理;所述第二目标内核函数指令为所述不可中断的睡眠状态进程内所述第一目标内核函数指令的下一条执行指令。
13.一种不可中断的睡眠状态进程的退出装置,其特征在于,所述装置包括:
指令定位模块,用于响应于处于不可中断的睡眠状态进程且进程响应延长时长大于时长阈值,确定第一目标内核函数指令;所述第一目标内核函数指令为待追踪替换的内核函数指令;所述内核函数指令为所述不可中断的睡眠状态进程内任意一条执行指令;
执行替换模块,用于响应于执行至所述第一目标内核函数指令,将所述第一目标内核函数指令替换成断点指令;
进程退出模块,用于执行所述断点指令断点跳转至执行进程退出程序,以根据所述进程退出程序退出所述不可中断的睡眠状态进程。
14.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至12中任一项所述方法的步骤。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311235060.7A CN116991559B (zh) | 2023-09-25 | 2023-09-25 | 不可中断的睡眠状态进程的退出方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311235060.7A CN116991559B (zh) | 2023-09-25 | 2023-09-25 | 不可中断的睡眠状态进程的退出方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116991559A true CN116991559A (zh) | 2023-11-03 |
CN116991559B CN116991559B (zh) | 2024-02-02 |
Family
ID=88528579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311235060.7A Active CN116991559B (zh) | 2023-09-25 | 2023-09-25 | 不可中断的睡眠状态进程的退出方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116991559B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105528284A (zh) * | 2014-09-28 | 2016-04-27 | 华为技术有限公司 | 一种内核故障注入方法及电子设备 |
CN107480005A (zh) * | 2017-07-31 | 2017-12-15 | 惠州华阳通用电子有限公司 | 一种Linux系统进程守护方法 |
US20180365050A1 (en) * | 2016-05-31 | 2018-12-20 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Method for Controlling Process and Related Device |
CN115904770A (zh) * | 2022-09-26 | 2023-04-04 | 深信服科技股份有限公司 | 进程的恢复方法、装置、电子设备及存储介质 |
-
2023
- 2023-09-25 CN CN202311235060.7A patent/CN116991559B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105528284A (zh) * | 2014-09-28 | 2016-04-27 | 华为技术有限公司 | 一种内核故障注入方法及电子设备 |
US20180365050A1 (en) * | 2016-05-31 | 2018-12-20 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Method for Controlling Process and Related Device |
CN107480005A (zh) * | 2017-07-31 | 2017-12-15 | 惠州华阳通用电子有限公司 | 一种Linux系统进程守护方法 |
CN115904770A (zh) * | 2022-09-26 | 2023-04-04 | 深信服科技股份有限公司 | 进程的恢复方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116991559B (zh) | 2024-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106682162B (zh) | 日志管理方法及装置 | |
CN109165138B (zh) | 一种监控设备故障的方法和装置 | |
WO2023115999A1 (zh) | 设备状态监控方法、装置、设备及计算机可读存储介质 | |
CN111881014A (zh) | 一种系统测试方法、装置、存储介质及电子设备 | |
CN108509322B (zh) | 避免过度回访的方法、电子装置及计算机可读存储介质 | |
CN106997313B (zh) | 一种应用程序的信号处理方法、系统及终端设备 | |
CN113220535A (zh) | 程序异常的处理方法、装置、设备及存储介质 | |
CN114816022A (zh) | 一种服务器电源异常监控方法、系统及存储介质 | |
CN116991559B (zh) | 不可中断的睡眠状态进程的退出方法和装置 | |
JPH10214208A (ja) | ソフトウェアの異常監視方式 | |
CN105912416A (zh) | 一种在终端中监测处理器的方法及终端 | |
CN110874279B (zh) | 故障定位方法、装置和系统 | |
CN111400087A (zh) | 一种操作系统的控制方法、终端以及存储介质 | |
CN111143127B (zh) | 监管网络设备的方法、装置、存储介质及设备 | |
CN112068980B (zh) | 采样cpu挂死前信息的方法和装置、设备和存储介质 | |
US9563494B2 (en) | Systems and methods for managing task watchdog status register entries | |
CN112631872B (zh) | 一种多核系统的异常处理方法及装置 | |
CN115421997A (zh) | 一种上报方法、处理器、终端设备及计算机可读存储介质 | |
CN110851328B (zh) | 一种密码卡在pkcs#11应用时异常掉电的检测方法 | |
CN109062718B (zh) | 一种服务器及数据处理方法 | |
CN115480884A (zh) | 芯片、芯片的测试监控方法及计算机可读存储介质 | |
CN117234787B (zh) | 系统级芯片运行状态监控方法及系统 | |
CN105391575A (zh) | 一种金库控制方法及系统 | |
US10108499B2 (en) | Information processing device with watchdog timer | |
CN113836035B (zh) | 电池管理系统测试方法、装置及电子设备 |
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 |