CN106227615B - 程序启动过程中预防进程卡死的方法及系统 - Google Patents
程序启动过程中预防进程卡死的方法及系统 Download PDFInfo
- Publication number
- CN106227615B CN106227615B CN201610576124.3A CN201610576124A CN106227615B CN 106227615 B CN106227615 B CN 106227615B CN 201610576124 A CN201610576124 A CN 201610576124A CN 106227615 B CN106227615 B CN 106227615B
- Authority
- CN
- China
- Prior art keywords
- timer
- stuck
- program
- timer object
- course
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0751—Error or fault detection not based on redundancy
- G06F11/0754—Error or fault detection not based on redundancy by exceeding limits
- G06F11/0757—Error or fault detection not based on redundancy by exceeding limits by exceeding a time limit, i.e. time-out, e.g. watchdogs
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种程序启动过程中预防进程卡死的方法及系统,方法包括:S1:程序启动时通过调用函数创建一个可等待的计时器对象;S2:依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若存在,则执行S4;若不存在,则执行S3;S3:在程序启动完成后设置计时器对象的计时器信号;回收所述计时器对象;S4:判断预设时间内是否出现所述程序上一次启动完成设置的计时器信号;若否,则执行S5;若是,则返回执行S3;S5:判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行S3。通过创建计时器对象判断上一次程序启动是否出现进程卡死,并强制结束卡死的进程。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种程序启动过程中预防进程卡死的方法及系统。
背景技术
Windows系统下,程序启动过程中容易出现线程超时现象,一般情况下,线程超时都是主线程卡死造成的,因此程序启动过程中如何监控主线程成为急需解决的问题。目前一般是通过进程间通信的方式,比如A进程和B进程通信,若超过一定时间B进程未接收到A进程的消息,则判定A进程超时。
例如,公开号为CN 103092746 B的中国专利,公开了一种线程异常的定位方法及系统,各被监控线程在初始化时主测到监控线程,各被监控线程在正常运行过程中更新自身的计数器;若监控线程发现某个被监控线程在所述设定的超时时间内未更新自身的计数器,则为该被监控线程的异常次数加1。该方法能够通过监控线程知道被监控线程是否存在异常,但是需要制定被监控线程与监控线程之间的握手规则,大大增加了工作量。
发明内容
本发明所要解决的技术问题是:提供一种程序启动过程中预防进程卡死的方法及系统,不需要定制握手规则,能够直接判断线程是否超时,并对超时的线程做出及时处理。
为了解决上述技术问题,本发明采用的技术方案为:
一种程序启动过程中预防进程卡死的方法,包括:
S1:程序启动时通过调用函数创建一个可等待的计时器对象;
S2:依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行S4;若判断不存在,则执行S3;
S3:在程序启动完成后设置计时器对象的计时器信号;回收所述计时器对象;
S4:判断预设时间内是否出现所述程序上一次启动完成设置的计时器信号;若否,则执行S5;若是,则返回执行S3;
S5:判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行S3。
本发明提供的另一个技术方案为:
一种程序启动过程中预防进程卡死的系统,包括:
创建模块,用于程序启动时通过调用函数创建一个可等待的计时器对象;
第一判断模块,用于依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行第二判断模块;若判断不存在,则进入设置模块;
设置模块,用于在程序启动完成后设置计时器对象的计时器信号;回收所述计时器对象;
第二判断模块,用于判断预设时间内是否出现所述程序上一次启动完成设置的计时器信号;若否,则进入强制结束模块;若是,则返回执行设置模块;
强制结束模块,用于判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行设置模块。
本发明的有益效果在于:计时器对象是系统内核对象,通过创建计时器对象,程序启动完成后会设置一个计时器信号,再次启动该程序时依据该计时器信号是否在预设时间内出现即可判断出并判断前一次启动是否出现进程卡死现象,并强制结束卡死的进程,从而避免进程再次卡死,实现程序成功启动。并且,每一次创建计时器对象时,通过判断是否存在过与该计时器对象同名的计时器对象,能够得知之前是否创建过该计时器对象,如果之前没有创建过该计时器对象,说明本次启动时不会出现计时器信号,则进入正常启动流程,避免浪费时间和资源进行判断卡死操作。
附图说明
图1为本发明一实施例的程序启动过程中预防进程卡死的方法的流程图;
图2为本发明实施例一的程序启动过程中预防进程卡死的方法的流程图;
图3为本发明一实施例的程序启动过程中预防进程卡死的系统的结构示意图;
图4为本发明实施例二的程序启动过程中预防进程卡死的系统的结构示意图。
标号说明:
1、创建模块;2、第一判断模块;3、第二判断模块;4、设置模块;5、强制结束模块;6、第三判断模块。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:通过创建计时器对象,程序启动完成后设置计时器对象的计时器信号,该程序再次启动时通过判断预设时间内是否出现计时器信号得知前次启动时是否出现进程卡死,并强制结束卡死的进程。
本发明涉及的技术术语解释:
请参照图1以及图2,本发明提供
一种程序启动过程中预防进程卡死的方法,包括:
S1:程序启动时通过调用函数创建一个可等待的计时器对象;
S2:依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行S4;若判断不存在,则执行S3;
S3:在程序启动完成后设置计时器对象的计时器信号;回收所述计时器对象;
S4:判断预设时间内是否出现所述程序上一次启动完成设置的计时器信号;若否,则执行S5;若是,则返回执行S3;
S5:判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行S3。
进一步的,所述S1之后S2之前,进一步包括:
S11:判断所述计时器对象是否创建成功;
S12:若是,则进入S2;若否,则继续进行程序启动过程。
从上述描述可知,由于系统异常等原因可能导致计时器对象创建不成功,此时进入正常的程序启动过程,避免浪费时间和资源进行判断卡死操作,保证不会因计时器对象创建失败而导致程序启动不正常。
进一步的,所述S1具体为:
在程序的入口函数或主函数中创建一个命名的可等待的计时器对象。
从上述描述可知,入口函数或主函数是程序运行时候最开始调用的函数,在程序的入口函数或主函数中创建一个命名的可等待的计时器对象,确保程序一启动便创建计时器对象。
进一步的,所述函数为CreateWaitableTimer函数。
从上述描述可知,调用CreateWaitableTimer函数创建计时器对象,若执行成功,则会返回可等待的计时器对象的句柄;执行出错则会返回错误信息;即使返回一个有效的句柄,但倘若同名的一个计时器对象已经存在,则会返回计时器对象已经存在的信息。
进一步的,所述设置计时器对象的计时器信号具体为:调用SetWaitableTimer函数对所述计时器对象设置计时器信号。
进一步的,所述预设时间的范围为3-30秒。
从上述描述可知,具体的预设时间依据程序启动的速度而定,由于大部分程序启动时间在3-30秒之间,因此本发明优选3-30秒,但不限于该时间。
请参照图3,本发明的另一个技术方案为:
一种程序启动过程中预防进程卡死的系统,包括:
创建模块1,用于程序启动时通过调用函数创建一个可等待的计时器对象;
第一判断模块2,用于依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行第二判断模块3;若判断不存在,则进入设置模块4;
设置模块4,用于在程序启动完成后设置计时器对象的计时器信号;回收所述计时器对象;
第二判断模块3,用于判断预设时间内是否出现所述程序上一次启动完成设置的计时器信号;若否,则进入强制结束模块5;若是,则返回执行设置模块4;
强制结束模块5,用于判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行设置模块4。
从上述描述可知,创建模块1创建计时器对象后,第一判断模块2判断是否存在过与所述计时器对象同名的计时器对象,从而能够知道该计时器对象是否为已经创建过的计时器对象,若否则说明该计时器对象没有计时器信号,进入正常启动流程,避免浪费时间和资源进行判断进程卡死操作;若是则通过第二判断模块3判断预设时间内是否出现计时器信号,从而能够知道该程序上一次启动时是否出现进程卡死,出现了则通过强制结束模块5强制结束该进程后再进行程序启动过程,防止进程再次卡死;并且通过设置模块4在程序启动完成后设置计时器对象的计时器信号,为下一次程序启动提供计时器信号;设置完成后对计时器信号进行回收,防止存在多个计时器对象导致异常。
进一步的,还包括:
第三判断模块6,用于判断所述计时器对象是否创建成功;
若是,则进入第一判断模块2;若否,则继续进行程序启动过程。
从上述描述可知,创建计时器对象后,通过第三判断模块6判断计时器对象是否创建成功,确保创建不成功时,程序也能进入正常启动过程。
进一步的,所述创建模块1,具体用于在程序的入口函数或主函数中调用CreateWaitableTimer函数创建一个命名的可等待的计时器对象。
进一步的,所述预设时间的范围为3-30秒。
请参照图2,本发明的实施例一为:
一种程序启动过程中预防进程卡死的方法,包括:
S101:在程序的入口函数或主函数中调用CreateWaitableTimer函数创建一个命名的可等待的计时器对象;
S1011:判断所述计时器对象是否创建成功;
S1012:若是,则进入S102;若否,则继续进行程序启动过程;
S102:依据所述CreateWaitableTimer函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行S104;若判断不存在,则执行S103;
S103:在程序启动完成后调用SetWaitableTimer函数设置计时器对象的计时器信号;设置计时器信号后回收所述计时器对象;
S104:判断10秒内是否出现所述程序上一次启动完成设置的计时器信号;若否,则执行S105;若是,则返回执行S103;
S105:判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行S103。
下面是本发明的一个具体应用实例:
在程序A的入口函数中调用CreateWaitableTimer函数创建计时器对象,CreateWaitableTimer函数返回可等待的计时器对象的句柄以及该计时器对象已经存在的信息;说明该计时器对象是已经创建过的,进行等待计时器信号的动作,判断该10秒内是否出现计时器信号;假设程序A正常启动时间为10秒,则设置10秒为等待时间,若10秒内没有出现计时器信号,则说明程序A在上一次启动时出现了进程卡死,因此进行强制结束卡死的进程,进入程序正常启动过程,程序启动成功后设置计时器对象的计时器信号,并回收该计时器对象。
上述创建计时器对象时,若CreateWaitableTimer函数返回值返回可等待的计时器对象的句柄以及该计时器对象不存在的信息,说明该计时器对象是首次创建,程序A进入正常启动过程;若CreateWaitableTimer函数返回错误信息,说明计时器对象创建失败。
请参照图4,本发明的实施例二为:
一种程序启动过程中预防进程卡死的系统,包括:
创建模块1,用于在程序的入口函数或主函数中调用CreateWaitableTimer函数创建一个命名的可等待的计时器对象;
第三判断模块6,用于判断所述计时器对象是否创建成功;
若是,则进入第一判断模块2;若否,则继续进行程序启动过程;
第一判断模块2,用于依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行第二判断模块3;若判断不存在,则进入设置模块4;
设置模块4,用于在程序启动完成后调用SetWaitableTimer函数设置计时器对象的计时器信号;回收所述计时器对象;
第二判断模块3,用于判断10秒内是否出现所述程序上一次启动完成设置的计时器信号;若否,则进入强制结束模块5;若是,则返回执行设置模块4;
强制结束模块5,用于判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行设置模块4。
综上所述,本发明提供的程序启动过程中预防进程卡死的方法及系统,通过创建计时器对象,并判断计时器对象是否创建成功,即使计时器对象创建失败也进入程序正常启动过程,并且程序启动成功后对计时器对象设置计时器信号,避免因计时器对象创建失败导致程序启动异常;若计时器对象创建成功则判断是否存在过与该计时器对象同名的计时器对象,从而能够知道该计时器对象是否为首次创建,如果是首次创建,由于计时器对象不存在计时器信号,因此直接进入正常启动流程,从而不会浪费时间进行进程卡死判断;若计时器对象是已经创建过的计时器对象则判断预设时间内是否出现计时器信号,从而能够判断出之前启动是否出现进程卡死,若出现进程卡死则先强制结束卡死的进程再继续正常程序启动过程,防止进程再次卡死导致程序启动异常。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种程序启动过程中预防进程卡死的方法,其特征在于,包括:
S1:程序启动时通过调用函数创建一个可等待的计时器对象;
S2:依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行S4;若判断不存在,则执行S3;
S3:在程序启动完成后设置计时器对象的计时器信号;回收所述计时器对象;
S4:判断预设时间内是否出现所述程序上一次启动完成设置的计时器信号;若否,则执行S5;若是,则返回执行S3;
S5:判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行S3。
2.根据权利要求1所述的程序启动过程中预防进程卡死的方法,其特征在于,所述S1之后S2之前,进一步包括:
S11:判断所述计时器对象是否创建成功;
S12:若是,则进入S2;若否,则继续进行程序启动过程。
3.根据权利要求1所述的程序启动过程中预防进程卡死的方法,其特征在于,所述S1具体为:
在程序的入口函数或主函数中创建一个命名的可等待的计时器对象。
4.根据权利要求1所述的程序启动过程中预防进程卡死的方法,其特征在于,所述函数为CreateWaitableTimer函数。
5.根据权利要求1所述的程序启动过程中预防进程卡死的方法,其特征在于,所述设置计时器对象的计时器信号具体为:调用SetWaitableTimer函数对所述计时器对象设置计时器信号。
6.根据权利要求1所述的程序启动过程中预防进程卡死的方法,其特征在于,所述预设时间的范围为3-30秒。
7.一种程序启动过程中预防进程卡死的系统,其特征在于,包括:
创建模块,用于程序启动时通过调用函数创建一个可等待的计时器对象;
第一判断模块,用于依据所述函数的返回值判断是否存在过与所述计时器对象同名的计时器对象,同时继续程序启动过程;若判断存在,则执行第二判断模块;若判断不存在,则进入设置模块;
设置模块,用于在程序启动完成后设置计时器对象的计时器信号;回收所述计时器对象;
第二判断模块,用于判断预设时间内是否出现所述程序上一次启动完成设置的计时器信号;若否,则进入强制结束模块;若是,则返回执行设置模块;
强制结束模块,用于判定所述程序上一次启动时存在进程卡死,强制结束卡死的进程后执行设置模块。
8.根据权利要求7所述的程序启动过程中预防进程卡死的系统,其特征在于,还包括:
第三判断模块,用于判断所述计时器对象是否创建成功;
若是,则进入第一判断模块;若否,则继续进行程序启动过程。
9.根据权利要求7所述的程序启动过程中预防进程卡死的系统,其特征在于,所述创建模块,具体用于在程序的入口函数或主函数中调用CreateWaitableTimer函数创建一个命名的可等待的计时器对象。
10.根据权利要求7所述的程序启动过程中预防进程卡死的系统,其特征在于,所述预设时间的范围为3-30秒。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610576124.3A CN106227615B (zh) | 2016-07-21 | 2016-07-21 | 程序启动过程中预防进程卡死的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610576124.3A CN106227615B (zh) | 2016-07-21 | 2016-07-21 | 程序启动过程中预防进程卡死的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106227615A CN106227615A (zh) | 2016-12-14 |
CN106227615B true CN106227615B (zh) | 2019-05-07 |
Family
ID=57531117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610576124.3A Active CN106227615B (zh) | 2016-07-21 | 2016-07-21 | 程序启动过程中预防进程卡死的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106227615B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106980555B (zh) * | 2017-03-24 | 2020-04-07 | 山东浪潮商用系统有限公司 | 一种超时线程处理方法及装置 |
CN107908519B (zh) * | 2017-10-31 | 2021-06-15 | 努比亚技术有限公司 | 卡屏检测方法、移动终端及计算机可读存储介质 |
CN113110895B (zh) * | 2021-03-19 | 2024-07-09 | 深圳震有科技股份有限公司 | 基于ipc置顶单例应用程序的方法、终端及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928817A (zh) * | 2006-09-30 | 2007-03-14 | 华为技术有限公司 | 一种定时器实现方法 |
CN101866171A (zh) * | 2010-04-28 | 2010-10-20 | 北京北方微电子基地设备工艺研究中心有限责任公司 | 一种生产线设备的计时控制方法及装置 |
CN102999387A (zh) * | 2012-11-09 | 2013-03-27 | 北京奇虎科技有限公司 | 进程运行装置及方法 |
CN104216716A (zh) * | 2014-09-06 | 2014-12-17 | 合肥中科瀚云信息科技有限公司 | 在线程序评判系统 |
CN105528246A (zh) * | 2015-12-07 | 2016-04-27 | 厦门雅迅网络股份有限公司 | 一种基于动态计时周期的进程内定时器管理方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5773989B2 (ja) * | 2009-05-04 | 2015-09-02 | アップル インコーポレイテッド | エラー表示を送信するための可変タイマの使用 |
-
2016
- 2016-07-21 CN CN201610576124.3A patent/CN106227615B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928817A (zh) * | 2006-09-30 | 2007-03-14 | 华为技术有限公司 | 一种定时器实现方法 |
CN101866171A (zh) * | 2010-04-28 | 2010-10-20 | 北京北方微电子基地设备工艺研究中心有限责任公司 | 一种生产线设备的计时控制方法及装置 |
CN102999387A (zh) * | 2012-11-09 | 2013-03-27 | 北京奇虎科技有限公司 | 进程运行装置及方法 |
CN104216716A (zh) * | 2014-09-06 | 2014-12-17 | 合肥中科瀚云信息科技有限公司 | 在线程序评判系统 |
CN105528246A (zh) * | 2015-12-07 | 2016-04-27 | 厦门雅迅网络股份有限公司 | 一种基于动态计时周期的进程内定时器管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106227615A (zh) | 2016-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101996106B (zh) | 一种对软件运行状态进行监控的方法 | |
CN106227615B (zh) | 程序启动过程中预防进程卡死的方法及系统 | |
CN104199753B (zh) | 一种虚拟机应用服务故障恢复系统及其故障恢复方法 | |
EP2479666B1 (en) | Methods and systems to display platform graphics during operating system initialization | |
CN102999387B (zh) | 进程运行装置及方法 | |
CN102693136A (zh) | 计算机的快速启动方法、快速启动系统及启动系统 | |
CN103744727A (zh) | 一种启动服务的方法、装置和智能设备 | |
CN101216792B (zh) | 实时操作系统的任务管理方法、装置 | |
CN102750192A (zh) | 一种数据平面异常检测的方法和装置 | |
CN106484461A (zh) | 智能终端中的服务保活方法及装置 | |
WO2016184058A1 (zh) | 一种终端异常恢复方法及终端 | |
CN105843697B (zh) | 一种浏览器控件的中断恢复方法及系统 | |
CN105159722B (zh) | Rtc唤醒系统的方法及计算机 | |
WO2012031474A1 (zh) | 一种终端设备的启动方法及装置 | |
CN105739767A (zh) | 一种触摸屏功能失效时的自动恢复的方法 | |
JP2001056772A (ja) | 障害監視システム | |
CN110413450A (zh) | 一种处理应用程序崩溃的方法、装置及设备 | |
CN101895440A (zh) | 一种安全网关及其故障检测方法 | |
US8701089B2 (en) | Program execution device and method for controlling the same | |
CN105677407A (zh) | 应用程序关闭方法和装置 | |
CN107229532A (zh) | 固件下载控制方法、系统,移动终端及可读存储介质 | |
CN108008995A (zh) | 一种基于调用类型的等待组件实现方法及装置 | |
CA2607435A1 (en) | Software process monitor | |
CN106951264A (zh) | 一种开机时间优化方法和装置 | |
CN104268027B (zh) | 嵌入式实时操作系统的故障处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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 |