进程重启方法、装置、计算设备及计算机存储介质
技术领域
本发明涉及计算机技术领域,具体涉及一种进程重启方法、装置、计算设备及计算机存储介质。
背景技术
在计算机工作的过程中,通常会有在后台一直运行的进程,这些进程的运行需要依赖于其它文件,例如,依赖于一些算法文件。而在这些进程处于运行状态时,如果其依赖的其它文件发生了更新,则需要将更新后的文件进行重新加载,以使进程依赖更新后的文件来运行。
现有技术中,在依赖的其它文件发生更新后,通过人工方式控制进程进行重启并加载更新后的其它文件,这种加载更新的方式,需要人力投入;以及,直接对进程进行重启加载,会中断进程正在处理的任务,容易造成数据损坏或丢失。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的进程重启方法、装置、计算设备及计算机存储介质。
根据本发明的一个方面,提供了一种进程重启方法,其包括:
当检测到进程依赖的文件发生更新时,生成特定信号;
每当所述进程处于空闲状态或者所述进程处理完当前任务,主动查询到所述特定信号时,所述进程停止运行;或者,每当所述进程被动接收到所述特定信号,并在所述进程处于空闲状态中或者所述进程处理完当前任务后,所述进程停止运行;
重启所述进程,并加载更新后的所述文件。
根据本发明的另一方面,提供了一种进程重启装置,其包括:
生成模块,适于当检测到进程依赖的文件发生更新时,生成特定信号;
停止模块,适于每当所述进程处于空闲状态或者所述进程处理完当前任务,主动查询到所述特定信号时,所述进程停止运行;或者,每当所述进程被动接收到所述特定信号,并在所述进程处于空闲状态中或者所述进程处理完当前任务后,所述进程停止运行;
重启模块,适于重启所述进程,并加载更新后的所述文件。
根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述进程重启方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述进程重启方法对应的操作。
根据本发明的进程重启方法、装置、计算设备及计算机存储介质,当检测到进程依赖的文件发生更新时,生成特定信号;每当所述进程处于空闲状态或者所述进程处理完当前任务,主动查询到所述特定信号时,所述进程停止运行;或者,每当所述进程被动接收到所述特定信号,并在所述进程处于空闲状态中或者所述进程处理完当前任务后,所述进程停止运行;重启所述进程,并加载更新后的所述文件。本发明方案,通过主动查询或被动接收两种方式获得特定信号,并在进程处于空闲状态或者进程处理完当前任务的情况下,控制进程停止运行,以避免影响进程当前处理的任务,以及避免数据损坏或丢失;然后重启加载更新后的文件,进而自动完成文件的加载,无需人力投入。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的进程重启方法的流程图;
图2示出了根据本发明另一个实施例的进程重启方法的流程图;
图3示出了根据本发明又一个实施例的进程重启方法的流程图;
图4示出了根据本发明一个实施例的进程重启装置的功能框图;
图5示出了根据本发明实施例的一种计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的进程重启方法的流程图。如图1所示,该方法包括以下步骤:
步骤S110:当检测到进程依赖的文件发生更新时,生成特定信号。
具体地,通过实时或准实时的检测,可以检测出进程依赖的文件是否发生更新,并在检测出文件发生更新时,生成特定信号。
本发明不对检测文件是否发生更新的检测方式做具体限定,具体实施时,本领域技术人员可依据任意可以确定文件发生更新的条件来进行检测。可选的,根据文件大小、文件内容的特征值、文件的时间戳、和/或根据文件修改记录来检测进程依赖的文件是否发生更新。
步骤S120:在进程处于空闲状态或者进程处理完当前任务之后,控制进程停止运行。
在生成特定信号后,根据该特定信号,首先控制相应的进程停止运行,然后进行重启加载。其中,在本发明中,为避免盲目停止进程导致正在处理的任务的数据损坏或丢失,在进程处于空闲状态或者进程处理完当前任务之后,控制进程停止运行。
具体地,进程获取特定信号的方式分为主动查询和被动接收两种,相应的控制进程停止运行的过程也不同:方式一,每当进程处于空闲状态或者进程处理完当前任务,主动查询到特定信号时,进程停止运行。方式二,每当进程被动接收到特定信号,并在进程处于空闲状态中或者进程处理完当前任务后,进程停止运行。通过上述两种方式,均可以实现在进程当前没有正在处理的任务的情况下,控制进程停止运行。
步骤S130:重启进程,并加载更新后的文件。
根据本实施例提供的进程重启方法,当检测到进程依赖的文件发生更新时,生成特定信号;每当进程处于空闲状态或者进程处理完当前任务,主动查询到特定信号时,进程停止运行;或者,每当进程被动接收到特定信号,并在进程处于空闲状态中或者进程处理完当前任务后,进程停止运行;重启进程,并加载更新后的文件。本实施例方案,通过主动查询或被动接收两种方式获得特定信号,并在进程处于空闲状态或者进程处理完当前任务的情况下,控制进程停止运行,以避免数据损坏或丢失;然后重启加载更新后的文件,进而自动完成文件的加载,无需人力投入。
图2示出了根据本发明另一个实施例的进程重启方法的流程图。在本实施例中,通过主动查询的方式获取特定信号。如图2所示,该方法包括以下步骤:
步骤S210:当检测到进程依赖的文件发生更新时,生成特定信号;存储所述特定信号,以供依赖发生更新的文件的至少一个进程查询。
在文件发生更新时,该文件的时间戳则更新为文件更新时的时间。基于此,当检测到进程依赖的文件对应的时间戳发生变化时,确定进程依赖的文件发生更新。具体地,检测进程依赖的文件对应的时间戳,若最近两次检测到的文件的时间戳对应的时间不相同,则表明对文件进行了更新,生成特定信号。
在生成特定信号后,将特定信号存储在数据库或特定文件中。进一步的,为便于进程通过主动查询直接确定是否存在本进程依赖的文件发生更新的特定信号,在本发明的一些具体实施例中,针对不同的文件,或者针对依赖发生更新的文件的进程不同,将生成的特定信号以不同的标识进行表示,而在主动查询的过程中,进程可以根据特定信号的标识不同,直接确定是否存在本进程依赖的文件发生更新的特定信号,或者,可以直接确定发生更新的具体文件。举例来说,进程1依赖文件a,进程2依赖文件b,当文件a发生更新时,生成特定信号1,当文件b发生更新时,生成特定信号2。若通过主动查询的方式查询到特定信号1,则进程1可以直接确定存在本进程依赖的文件发生更新的特定信号,而进程2则确定不存在本进程依赖的文件发生更新的特定信号。
在本发明的另一些具体实施例中,在对特定信号进行存储时,依据进程与进程依赖的文件的关系列表,将所述特定信号存储于对应进程关联的特定位置,而在主动查询的过程中,进程可以到对应的特定位置中进行查询,以直接确定是否存在本进程依赖的文件发生更新的特定信号。
步骤S220:每当进程处于空闲状态或者进程处理完当前任务,主动查询到特定信号时,进程停止运行。
在本实施例中,进程通过主动查询的方式获取特定信号,这种获取方式可以由进程控制主动查询的时机,通过在每当进程处于空闲状态或者进程处理完当前任务时主动查询特定信号,可以最大程度的达到不影响进程处理当前任务以及维护数据的完整性的目的。
其中,当进程中存在多个线程时,进程处于空闲状态具体为进程中的各个线程都处于空闲状态,此时各个线程中没有正在处理的任务;当进程中存在多个线程时,进程处理完当前任务具体为进程中的各个线程均处理完其对应的线程当前任务,相应的,确定进程是否处理完当前任务,即确定各个线程是否均处理完其对应的线程当前任务。在本发明的一些具体实施例中,确定进程是否处理完当前任务的方法为:当进程中的任一个线程处理完其对应的线程当前任务,该线程判断进程中的其它线程是否都处理完其对应的线程当前任务,若是,则确定进程处理完当前任务;若否,则等待直至线程都处理完其对应的线程当前任务。这里面有一个前提,在一个线程处理完当前任务时去检查信号,如果信号存在此线程就不再接收新任务,让自己处理在一个处理完任务的状态,等待其它线程进行状态判断。这种在任一线程处理完其对应的线程当前任务时,触发判断其它线程是否均处理完其对应的线程当前任务的方法,避免了以高频率同时对所有线程进行判断,降低了运算量;以及,在任一线程处理完其对应的线程当前任务时,均触发判断,可以准确确定每次所有线程处理完其对应的线程当前任务的时机,进而可以及时查询到特定信号。但是,本发明并不以此为限,在具体实施时,本领域技术人员可根据硬件条件以及实际需求,以其它方法确定进程是否处理完当前任务,例如,以预设时间间隔确定进程是否处理完当前任务。
具体地,当进程处于空闲状态或者进程处理完当前任务,进程到数据库或特定文件中主动查询是否存在本进程依赖的文件发生更新的特定信号,若存在,则控制进程停止运行。若不存在,则当下一次进程处于空闲状态或者进程处理完当前任务,再次执行主动查询及后续步骤。
步骤S230:重启进程,并加载更新后的文件。
具体地,由激活进程以预设时间间隔检测进程是否处于运行状态;若否,则重启进程。
根据本实施例提供的进程重启方法,当检测到进程依赖的文件发生更新时,生成特定信号,将特定信号存储在数据库或特定文件中,以便于进程主动查询该特定信号;每当进程处于空闲状态或者进程处理完当前任务,主动查询到特定信号时,进程停止运行;由激活进程以预设时间间隔检测进程是否处于运行状态;若否,则重启进程。利用本实施例提供的进程重启方法,通过主动查询的方式获取生成的特定信号,可以由进程控制主动查询的时机,通过在每当进程处于空闲状态或者进程处理完当前任务时主动查询特定信号,可以最大程度的达到不影响进程处理当前任务以及维护数据的完整性的目的;然后重启加载更新后的文件,进而自动完成文件的加载,无需人力投入。
图3示出了根据本发明又一个实施例的进程重启方法的流程图。在本实施例中,通过被动接收的方式获取特定信号。如图2所示,该方法包括以下步骤:
步骤S310:建立进程与进程依赖的文件的关系列表。
通过建立进程与进程依赖的文件的关系列表,在存在多个进程时,可以便于确定依赖特定信号对应的发生更新的文件的至少一个进程。
步骤S320:当检测到进程依赖的文件发生更新时,生成特定信号。
在文件发生更新时,该文件的时间戳则更新为文件更新时的时间。基于此,当检测到进程依赖的文件对应的时间戳发生变化时,确定进程依赖的文件发生更新。具体地,检测进程依赖的文件对应的时间戳,若最近两次检测到的文件的时间戳对应的时间不相同,则表明对文件进行了更新,生成特定信号。
步骤S330:查询关系列表,得到依赖发生更新的文件的至少一个进程;向至少一个进程发送特定信号。
在生成特定信号后,在关系列表中查询该特定信号对应的发生更新的文件,通过关系列表中进程与该发生更新的文件的对应关系,得到关系列表中与之对应的至少一个进程,然后向该至少一个进程发送特定信号,进而快速、准确的确定需要进行重启并加载更新后的文件的进程。
步骤S340:每当进程被动接收到特定信号,并在进程处于空闲状态中或者进程处理完当前任务后,进程停止运行。
在本实施例中,进程以被动接收的方式获取特定信号,这种获取方式可以使进程及时得到特定信号,进而有利于提高加载的时效性;以及,进程直接被动接收本进程依赖的文件发生更新的特定信号,而由其它处理进程来确定依赖发生更新的文件的至少一个进程,进而减少了本进程的处理流程,并进一步降低对本进程处理任务的效率和进度的影响。
具体地,当进程被动接收到特定信号,则判断进程是否处于空闲状态或进程是否处理完当前任务,若判定结果为进程未处于空闲状态中或者进程未处理完当前任务时,则在进程处理任务的过程中继续判断,直至判断出进程处于空闲状态或进程处理完当前任务后,则控制进程停止运行,进而达到不影响进程处理当前任务以及维护数据的完整性的目的。
其中,当进程中存在多个线程时,进程处于空闲状态具体为进程中的各个线程都处于空闲状态,此时各个线程中没有正在处理的任务;这里面有一个前提,在一个线程处理完当前任务时去检查信号,如果信号存在此线程就不再接收新任务,让自己处理在一个处理完任务的状态,等待其它线程进行状态判断。当进程中存在多个线程时,进程处理完当前任务具体为进程中的各个线程均处理完其对应的线程当前任务,相应的,确定进程是否处理完当前任务,即确定各个线程是否均处理完其对应的线程当前任务。在本发明的一些具体实施例中,确定进程是否处理完当前任务的方法为:当进程中的任一个线程处理完其对应的线程当前任务,该线程判断进程中的其它线程是否都处理完其对应的线程当前任务,若是,则确定进程处理完当前任务;若否,则等待直至线程都处理完其对应的线程当前任务。这种在任一线程处理完其对应的线程当前任务时,触发判断其它线程是否均处理完其对应的线程当前任务的方法,避免了以高频率同时对所有线程进行判断,降低了运算量;以及,在任一线程处理完其对应的线程当前任务时,均触发判断,可以准确确定每次所有线程处理完其对应的线程当前任务的时机,进而可以及时查询到特定信号。但是,本发明并不以此为限,在具体实施时,本领域技术人员可根据硬件条件以及实际需求,以其它方法确定进程是否处理完当前任务,例如,以预设时间间隔确定进程是否处理完当前任务。
步骤S350:重启进程,并加载更新后的文件。
具体地,由激活进程以预设时间间隔检测进程是否处于运行状态;若否,则重启进程。
根据本实施例提供的进程重启方法,建立进程与进程依赖的文件的关系列表,以便于确定依赖特定信号对应的发生更新的文件的至少一个进程;当检测到进程依赖的文件发生更新时,生成特定信号;查询关系列表,得到依赖发生更新的文件的至少一个进程;向至少一个进程发送特定信号;每当进程被动接收到特定信号,并在进程处于空闲状态中或者进程处理完当前任务后,进程停止运行;重启进程,并加载更新后的文件。利用本实施例提供的进程重启方法,通过建立进程与进程依赖的文件的关系列表,以在存在多个进程时,通过查询该关系列表,及时并准确的确定依赖发生更新的文件的至少一个进程;进程以被动接收的方式获取生成的特定信号,可以使进程及时得到特定信号,进而有利于提高加载的时效性;以及,在进程处于空闲状态或者进程处理完当前任务后,进程停止运行,可以最大程度的达到不影响进程处理当前任务以及维护数据的完整性的目的;然后重启加载更新后的文件,进而自动完成文件的加载,无需人力投入。
图4示出了根据本发明一个实施例的进程重启装置的功能框图。如图4所示,该装置包括:生成模块410、停止模块420、重启模块430,可选的,该装置还包括:构建模块440、查询模块450、发送模块460以及存储模块470。
生成模块410,适于当检测到进程依赖的文件发生更新时,生成特定信号;
停止模块420,适于每当所述进程处于空闲状态或者所述进程处理完当前任务,主动查询到所述特定信号时,所述进程停止运行;或者,每当所述进程被动接收到所述特定信号,并在所述进程处于空闲状态中或者所述进程处理完当前任务后,所述进程停止运行;
重启模块430,适于重启所述进程,并加载更新后的所述文件。
在一种可选的实施方式中,生成模块410进一步适于:当检测到进程依赖的文件对应的时间戳发生变化时,确定进程依赖的文件发生更新。
停止模块420进一步包括:当所述进程中的任一个线程处理完其对应的线程当前任务,该线程判断所述进程中的其它线程是否都处理完其对应的线程当前任务,若是,则确定所述进程处理完当前任务;若否,则等待直至所述线程都处理完其对应的线程当前任务。
其中,所述进程处于空闲状态具体为:所述进程中的各个线程都处于空闲状态。
构建模块440,适于建立进程与进程依赖的文件的关系列表。
查询模块450,适于查询所述关系列表,得到依赖发生更新的文件的至少一个进程;
发送模块460,适于向所述至少一个进程发送所述特定信号。
存储模块470,适于存储所述特定信号,以供依赖发生更新的文件的至少一个进程查询。
存储模块470进一步适于:依据进程与进程依赖的文件的关系列表,将所述特定信号存储于对应进程关联的特定位置。
重启模块430进一步适于:以预设时间间隔检测所述进程是否处于运行状态;若否,则重启所述进程。
关于上述各个模块的具体结构和工作原理可参照方法实施例中相应步骤的描述,此处不再赘述。
本申请实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的进程重启方法。
图5示出了根据本发明实施例的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图5所示,该计算设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
其中:
处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。
通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器502,用于执行程序510,具体可以执行上述进程重启方法实施例中的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510具体可以用于使得处理器502执行以下操作:
当检测到进程依赖的文件发生更新时,生成特定信号;
每当所述进程处于空闲状态或者所述进程处理完当前任务,主动查询到所述特定信号时,所述进程停止运行;或者,每当所述进程被动接收到所述特定信号,并在所述进程处于空闲状态中或者所述进程处理完当前任务后,所述进程停止运行;
重启所述进程,并加载更新后的所述文件。
在一种可选的方式中,程序510具体可以进一步用于使得处理器502执行以下操作:
当检测到进程依赖的文件对应的时间戳发生变化时,确定进程依赖的文件发生更新。
在一种可选的方式中,程序510具体可以进一步用于使得处理器502执行以下操作:
当所述进程中的任一个线程处理完其对应的线程当前任务,该线程判断所述进程中的其它线程是否都处理完其对应的线程当前任务,若是,则确定所述进程处理完当前任务;若否,则等待直至所述线程都处理完其对应的线程当前任务。
在一种可选的方式中,所述进程处于空闲状态具体为:所述进程中的各个线程都处于空闲状态。
在一种可选的方式中,程序510具体可以进一步用于使得处理器502执行以下操作:建立进程与进程依赖的文件的关系列表。
在一种可选的方式中,程序510具体可以进一步用于使得处理器502执行以下操作:
查询所述关系列表,得到依赖发生更新的文件的至少一个进程;
向所述至少一个进程发送所述特定信号。
在一种可选的方式中,程序510具体可以进一步用于使得处理器502执行以下操作:
存储所述特定信号,以供依赖发生更新的文件的至少一个进程查询。
在一种可选的方式中,程序510具体可以进一步用于使得处理器502执行以下操作:
依据进程与进程依赖的文件的关系列表,将所述特定信号存储于对应进程关联的特定位置。
在一种可选的方式中,程序510具体可以进一步用于使得处理器502执行以下操作:以预设时间间隔检测所述进程是否处于运行状态;若否,则重启所述进程。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的进程重启装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。