一种对操作系统中重要进程进行检测和复位的方法

文档序号:6371758阅读:201来源:国知局
专利名称:一种对操作系统中重要进程进行检测和复位的方法
技术领域
本发明涉及一种检测和复位的方法,尤其是涉及一种基于操作系统内核实现的通过计算机前面板特定按钮对操作系统中重要进程进行检测和复位的方法,属于计算机应用领域。
背景技术
当计算机被用作提供特定信息服务时,计算机操作系统中运行的服务程序是否正常、持续的运行对于计算机用户来说是非常重要的。但是检测操作系统中特定的服务程序是否正确运行,以及在运行异常时对该服务复位(重新运行),这里的复位即指重新启动用户指定的特定重要进程。这样的操作对于没有太多计算机使用经验的用户来说是比较复杂的。
现在的计算机在操作的易用性上还远没有满足普通用户的需求,对于计算机操作系统,尤其是服务器操作系统的操作,仍然需要用户具有较高的专业技术技能方能正确操作。对于服务器计算机管理中,关键应用程序的运行健康状况对于计算机管理人员而言是非常重要的工作内容。就目前的各种计算机操作系统,检测计算机操作系统中关键应用程序的运行状态、并在运行错误时重新启动这些关键应用程序,仍然要求管理员具有相当丰富的计算机操作技术方能完成这些操作。
如果有一种简便可靠的方法能够及时、准确的检测计算机中关键进程的运行状态,并在关键进程停止运行的时候能够简便可靠的重新启动这些进程,并且这些操作方式非常简单,以至于没有太多计算机使用经验的管理员也可以正确的完成这些操作,那么就可以大大降低对计算机管理员的技术水平要求,降低企业、单位的IT设备管理人力资源成本。

发明内容
本发明要解决的技术问题是提出一种对操作系统中重要进程进行检测和复位的方法,使得用户仅仅通过操作一个特定的按钮,就可以完成对操作系统中重要服务进程进行检测或复位操作。
本发明所述一种对操作系统中重要进程进行检测和复位的方法,包括如下步骤按照ACPI标准规范,编写内核模块,将该内核模块加入到运行在这个计算机上的操作系统内核中,以接管计算机系统的电源管理;将特定按钮的引脚接到计算机主板的电源跳线上,按下所述特定按钮,内核模块就会探测到电源跳线发生了通断变化,然后将每一次通断变化发送消息给运行在用户空间的后台程序;后台程序接收按键消息事件,判断用户是要进行进程检测,还是进程复位,进行相应的进程检测或进程复位处理。
本发明提出一种非常简单的方法,可以检测计算机操作系统中关键进程是否正常运行,并在某些关键进程停止运行的情况下让用户对这些进程复位(即重新启动)。用户只要通过计算机前面板上一个特定的按钮,就可以检测计算机操作系统中关键进程的运行状况,并在运行停止时对这些关键进程复位(即重新启动)。这样一来,即使一个非常普通的用户也可以完成管理计算机系统的关键应用程序的操作了。这对于中小学校和其它缺乏经验丰富的计算机操作人员的企事业单位降低系统维护人员成本,具有非常显著的经济意义。
采用本发明所述方法,极大地方便普通的计算机用户进行应用程序的检测和复位,这样提高了计算机特别是作为服务器使用的计算机的易用性,特别是可降低对服务器管理人员的技术要求,在一定程度上节省计算机网络的管理费用。本发明所述方法可广泛应用于各种计算机操作系统。


图1是本发明所述方法的整体流程图;图2是本发明所述方法中的内核模块的处理流程图。
具体实施例方式
如前所述,本发明要解决的技术问题是方便用户及时检查处理操作系统中特定的服务程序是否正确运行,因此,本发明提出了一键处理的方式。首先在操作系统上安装可以响应用户按键的软件,该软件可以检测到用户的按键动作,并且通过设置计算机蜂鸣器发声对按键动作响应,并进行相应操作;其次用户需要在计算机上通过一个配置软件,将特定的重要进程的名称配置到需要进行检测和复位操作的进程集中。然后通过按键就可以对进程集中的进程同时进行检测和复位操作。
下面以Linux操作系统为例,具体描述本发明的基本原理。
一般来说,当前主流的计算机系统都符合ACPI(AdvancedConfiguration and Power Interface高级配置和电源接口)标准,这样,可以编写一个遵循ACPI标准的内核模块,加入到运行在这个计算机上的操作系统内核中,以便接管计算机系统的电源管理;将特定按钮的引脚接到计算机主板的Power(电源)跳线上,当按下这个按钮时,内核模块就会探测到Power(电源)跳线发生了通断变化,内核模块就会将每一次通断变化如实的发送消息给运行在用户空间的后台程序。后台程序通过判断每一次按键消息的间隔时间,判断用户是要进行进程检测,还是进程复位,或这是一次予以忽略的误操作。然后后台程序根据判断出的用户操作,进行进程检测或进程复位,并设置计算机的蜂鸣器发出不同的声音响应用户这次操作的结果。
图1给出的总体流程图中,是按照以下的流程工作的
用户按一次该按钮时,就会发生一次主板Power(电源)跳线的通断事件。由于内核模块是遵循ACPI规范编写的,它可以捕捉到这个跳线通断事件,从而判断用户是否按下了前面板上的这个按钮;当然,也可以将这个按钮的引线连接到主板的串口或并口的引脚上,然后判断串口或并口引脚的电源通断事件。
内核模块发现了按钮事件后,向用户空间的后台程序发送用户按键事件的消息;该应用程序收到了用户按键事件的消息后,对该消息进行如下的判断如果本次按键与上次按键的时间间隔是否超过3秒钟?如果是,则检查进程集的进程是否正常运行,如果不是,则表示用户要对进程集的进程进行复位操作。关于对按键的两次时间间隔是否超过3秒钟的判断,本文将在后面作出具体说明。
检查进程集的进程是否正常运行时,如果正常,应用程序不做任何响应,等待接收下次按键事件;如果不正常,应用程序控制计算机的蜂鸣器连续发出5秒钟提示音,提示用户进程异常。
进行复位操作包括读取进程集的配置文件,针对普通程序和服务程序分别处理重新启动,这些进程都处理完后,应用程序控制计算机的蜂鸣器发出1秒钟提示音,提示用户进程复位操作成功。
图2给出的是内核模块是如何发现按键事件并向应用程序发送消息的工作原理。
一旦用户按下前面板上的这个按钮,主板上的Power(电源)跳线就会发生一次通断事件,也就是跳线的两个引脚被接通并断开一次。
在支持ACPI规范的操作系统中,操作系统内核都会查询并维护ACPI事件队列。在Linux操作系统中,ACPI队列是一个保存在内核空间的名为acpi_bus_event_list的链表。该链表中保存了当前系统中各个ACPI电源管理对象发生的事件,例如当用户按下前面板上特定的按钮之后,就会导致主板的Power(电源)跳线发生一次通断,这时操作系统就会发现这个事件,然后在ACPI事件队列中加入一个节点,将这个电源按钮事件加入到队列中。这里要注意的是,在内核中维护了一个整型的全局变量event_is_open设置为1,否则操作系统不会将事件加入到ACPI事件队列中。
参见图2,内核模块加入操作系统内核后,进行初始化,event_is_open设置为1;接着,查询ACPI事件队列,搜索新事件;发现新事件后,判断是否属于由主板电源跳线引起的通断事件,如果不是,则不作处理,继续搜索;如果是,则向用户空间的进程发送用户按键事件的消息。
为了不增加操作系统中CPU的负载,内核模块在每一次轮询检查ACPI事件队列后,会调用sleep_on_timeout函数,以保证有100毫秒间隔。
上述向用户空间的后台程序进程发送用户按键事件的消息,其具体实现介绍如下内核模块利用Linux操作系统内核的Proc文件系统机制在Linux文件系统中的/proc/acpi目录下创建一个名为butonclick的文件,当这个内核模块被加载到Linux内核中的时候,文件/proc/acpi/buttonclick将自动生成。然后用户空间的后台进程通过阻塞的方式来读取这个文件。当用户空间的后台进程调用read系统调用读取文件/proc/acpi/buttonclick时,内核模块(buttonclick)会启动一个内核线程proc_buttonclick_read,来为此read系统调用服务。这个内核线程以轮询的方式检查ACPI事件队列中是否存在新的事件,并且这个事件是电源按钮事件。当ACPI事件队列中没有电源按钮事件时,用户空间的后台进程就会一直被阻塞。当在某一次轮询过程中发现ACPI事件队列中有一个事件是电源按钮事件,就会生成一个固定内容的字符串“BUTTONCLICK”,然后把这个字符串返回给用户空间的后台进程,这样后台进程的这一次读取/proc/acpi/buttonclick文件的过程就结束了。当后台进程从读取/proc/acpi/buttonclick文件的系统调用中返回时,通过比较读取的内容是否为“BUTTONCLICK”,就可以判断是否为内核模块(buttonclick)发送过来的用户按了一次前面板特定按钮的按键操作。这样一来,内核模块就将捕捉到的用户按键事件发送给运行在用户空间的后台进程了。
以上介绍了本发明的基本原理,下面结合图1和图2,进一步说明本发明用户空间的后台程序处理用户按键事件的具体原理。
用户要对某些特定的程序进行检测或复位操作,必须将这些程序写到进程集里面,因此要首先设定该进程集。进程集的设置是这样的用户将要进行检测或复位操作的进程在磁盘上保存的绝对路径都写到一个文本文件中,一行一个。然后用户空间的后台进程通过读取这个文件的内容,就知道它要操作的进程集里面有哪些进程了。对于属于操作系统服务进程的进程,可以在进程名称前加service前缀,如果是普通进程,就直接写名字。
这里,假设进程集里有两个进程,一个是操作系统中的邮件服务器进程sendmail,一个是普通的进程top,那么在文本文件中就按照如下格式编写service/usr/sbin/sendmail/usr/bin/top当用户空间的后台进程读取此文件时,发现前缀sendmail的是service,那么在进行进程复位的时候,会调用shell命令,以“servicesendmail restart”的方式来重新启动sendmail进程;当发现普通进程top时,在进行进程复位的操作时,仅仅是简单的启动这个进程“/usr/bin/top”。这样在进程复位时将服务进程和普通进程区别开来,有利于服务进程在复位操作中的稳定性。
写在这个文件中的所有进程,就成为用户要进行检测和复位操作的进程集,这样一来通过修改配置文件,就实现了对进程集的配置。
用户在检测和复位操作时,需要启动按钮操作,本发明中,按钮操作有如下的定义方式(1)只按下一次按钮表示用户要检查进程集中的进程是否都运行正常。
(2)间隔3秒钟内按下两次按钮表示用户要将进程集中的所有进程都进行复位(重新启动)操作。
本发明中,对应按钮操作,计算机的蜂鸣器响应也有如下定义方式(1)用户只按下一次按钮后,如果蜂鸣器不发出任何响声,表示检测结果是进程集中的所有重要进程都运行良好。
(2)用户只按下一次按钮后,如果蜂鸣器连续发出5秒钟的蜂鸣声,表示检测结果是进程集中的某些进程运行故障,或者被锁死了,或者已经停止运行了。
(3)用户在3秒钟内按下两次按钮后,如果蜂鸣器发出1秒钟的短暂蜂鸣声,表明计算机已经响应了用户要求对进程集中的所有进程进行复位(重新启动)的操作,并且操作成功。
对于进程检测,进程检测的方法根据操作系统的不同,其实现细节会有所不同,在Linux下主要是通过查找proc文件系统实现的。在Linux下判断一个特定进程是否运行正常分为两步1,判断这个进程是否还在操作系统当中运行;2,如果这个进程在操作系统中运行,还要进一步判断这个进程是否运行正常。只有在这个进程在操作系统中运行,并且运行状态为正常的情况下,才能判定这个进程运行正常。
在Linux的proc文件系统中,当进入/proc目录时,会发现这个目录下有许多以数字为名字的子目录,这些子目录中都记载了操作系统中每一个进程的详细状态信息,而作为子目录名称的这个数字,就是对应进程在操作系统中的进程ID。
例如当前系统中运行的sendmail进程的ID是569,那么/proc目录下就会存在一个名称为569的子目录,进入这个目录,就会发现该目录下有一个名为exe的符号连接文件(symbol link),通过“ls 1”命令可以看到这个exe符号连接文件所指向的路径是“/usr/sbin/sendmail”,这就是sendmail进程保存在磁盘中的镜像,与设置在进程集文本文件中的路径是相同的(这是因为他们都指向磁盘中的同一个进程镜像文件/usr/sbin/sendmail)。
运行在用户空间的后台守护进程,就是通过将进程集的某一个进程与/proc目录下代表系统中每一个进程的子目录中的exe符号连接所指向的路径进行比较,来判断进程集中的这个进程是否正在运行之中。
如果/proc目录下某一个以进程ID命令的子目录中的exe符号连接指向的路径与进程集设置文件中某个特定进程的路径相同,那就说明进程集中的这个进程还在操作系统当中运行。
如果将/proc目录下所有以进程ID命名的目录都遍历完之后,还没有找到进程集中的这个进程,那就说明进程集中的这个进程已经异常退出操作系统了。
当运行在用户空间的后台守护进程完成进程集中所有进程的扫描后,发现进程集中的某些进程没有在操作系统中找到,就会设置计算机发出5秒钟的蜂鸣声提示用户进程集里的某些进程运行出现了异常。
但是,还不能够因为/proc目录下某一个进程目录中的exe符号连接指向的磁盘路径同进程集配置文件中的磁盘路径相同,就断定这个进程运行正常了。因为在某些情况下,这个进程可能仍然在操作系统中,但是由于某些意外原因导致进程被锁死,成为一个僵死(zombie)进程。这种情况下,虽然在/proc目录中可以找到对应的进程目录,但是这个进程已经死掉了。
因此,如果在/proc目录中找到了和进程集中某个进程对应的进程目录后,还不能立即判断这个进程是运行正常的,还要查看这个进程的状态是否为僵死(zombie),如果这个进程不是僵死进程,运行在用户空间的后台守护进程才能判断这个进程运行正常。
下面,说明判断一个进程运行状态是否正常的方法。
当用户空间的后台守护进程找到了同进程集的配置文件(就是前面提到的那个保存着进程对应的磁盘路径的文本文件)中某一个特定进程磁盘路径相同的进程在/proc目录下对应的子目录时,进入这个子目录,除了能够发现exe符号连接文件之外,还有一个名为status的文件,这个文件记录了当前进程的运行状态。响应用户按键操作的用户空间的后台守护进程还需要查找这个文件中的内容判断当前进程是否运行正常。这个文件的头两行内容如下NamesendmailStateS(sleeping)……第一行说明了进程的名字(但还不能以这个名字作为判断进程是否还在操作系统中的依据,因为其并不包含磁盘镜像文件的绝对路径,无法避免进程名字相同但功能不同的情况),第二行说明了进程的运行状态。这里,S(sleeping)说明进程运行良好,目前处于睡眠(sleeping)状态。可能出现的状态文字有以下五种D说明进程进入不可中断的睡眠(往往由于I/O阻塞引起)。
R说明进程处于正在运行的状态。
S说明进程正在睡眠。
T说明这个进程被跟踪或被停止(往往由调试程序debug工具引起)。
Z说明这个程序已经僵死,被挂起锁死了。
以上五种状态中,T状态只有在使用调试程序debug工具时才会出现,正常运行的系统中不会出现,因此可以不考虑这种状态。Z状态说明进程虽然还在操作系统当中,但是已经僵死不在正常运行了,当这种状态出现时,用户空间的后台进程就会认为这个进程已经僵死了,属于不正常运行,会设置计算机发出5秒钟的蜂鸣声提示用户进程集中的某些进程运行异常。
按照如上步骤,运行在用户空间的后台守护进程就可以判断出进程集里的进程是否都运行正常了。
复位操作的原理是这样的如果用户检测到进程集中有进程运行不正常了,可以进行进程复位操作,将进程集中的所有进程都重新启动一遍,这样所有的进程就又运行正常了。
进程复位就是将进程集里的每一个进程先停止,然后再重新启动。由于服务进程不同于一般普通进程,因此无论是在哪种类型的操作系统下,对于服务进程都必须使用不同于普通进程的方法来停止和启动,这样才能确保服务进程在复位操作中的稳定性。在Linux操作系统下,服务进程可以使用service命令来停止和启动,而普通进程可以直接使用killall命令来停止,然后直接运行进程集配置文件中指明的文件路径就可以。
最后所应说明的是以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种对操作系统中重要进程进行检测和复位的方法,其特征在于,包括如下步骤按照ACPI标准规范,编写内核模块,将该内核模块加入到运行在这个计算机上的操作系统内核中,以接管计算机系统的电源管理;将特定按钮的引脚接到计算机主板的电源跳线上,按下所述特定按钮,内核模块就会探测到电源跳线发生了通断变化,然后将每一次通断变化发送消息给运行在用户空间的后台程序;后台程序接收按键消息事件,判断用户是要进行进程检测,还是进程复位,进行相应的进程检测或进程复位处理。
2.根据权利要求1所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,所述内核模块探测电源跳线的通断变化,包括电源跳线每发生一次通断,操作系统就会发现这个事件,然后在ACPI事件队列中加入一个节点,将该事件加入到队列中;内核模块通过轮询ACPI事件队列,发现新事件并作出相应的处理。
3.根据权利要求2所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,发现新事件后,判断是否属于由主板电源跳线引起的通断事件,如果不是,则不作处理,继续搜索;如果是,则向用户空间的进程发送用户按键事件的消息。
4.根据权利要求2或3所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,内核模块在每一次轮询检查ACPI事件队列后,调用休眠函数sleep_on_timeout,以保证有100毫秒间隔。
5.根据权利要求4所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,所述内核模块将每一次通断变化发送消息给运行在用户空间的后台程序,包括内核线程以轮询的方式发现ACPI事件队列中有一个事件是电源按钮事件,生成一个固定内容的字符串,然后把这个字符串返回给用户空间的后台进程。
6.根据权利要求1所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,所述后台程序接收按键消息事件,还包括建立进程集,用户将要进行检测或复位操作的进程在磁盘上保存的绝对路径写到一个文本文件中;用户空间的后台进程通过读取这个文件的内容,获知进程集里面有哪些进程。
7.根据权利要求1、2、3、5或6所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,所述进程检测,包括首先判断这个进程是否还在操作系统当中运行;如果这个进程在操作系统中运行,还要进一步判断这个进程是否运行正常。
8.根据权利要求7所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,所述判断进程是否还在操作系统当中运行,由运行在用户空间的后台守护进程通过将进程集的某一个进程与/proc目录下代表系统中每一个进程的子目录中的exe符号连接所指向的路径进行比较,来判断这个进程是否正在运行之中。
9.根据权利要求8所述的对操作系统中重要进程进行检测和复位的方法,其特征在于如果/proc目录下某一个以进程ID命令的子目录中的exe符号连接所指向的路径与进程集设置文件中某个特定进程的路径相同,那就说明进程集中的这个进程还在操作系统当中运行;如果将/proc目录下所有以进程ID命名的目录都遍历完之后,还没有找到进程集中的这个进程,那就说明进程集中的这个进程已经异常退出操作系统了。
10.根据权利要求7所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,通过用户空间的后台守护进程需要查找状态文件中的内容,来判断当前进程是否运行正常。
11.根据权利要求10所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,所述状态文件中的内容,有以下五种D说明进程进入不可中断的睡眠;R说明进程处于正在运行的状态;S说明进程正在睡眠;T说明这个进程被跟踪或被停止;Z说明这个程序已经僵死,被挂起锁死了。
12.根据权利要求1、2、3、5或6所述的对操作系统中重要进程进行检测和复位的方法,其特征在于,所述进程复位,先判断是服务进程还是普通进程,使用相应的命令来停止和启动进程,然后直接进程集配置文件中指明的文件路径启动进程。
全文摘要
本发明公开了一种对操作系统中重要进程进行检测和复位的方法,包括按照ACPI标准规范,编写内核模块,将该内核模块加入到运行在这个计算机上的操作系统内核中;将特定按钮的引脚接到计算机主板的电源跳线上,按下所述特定按钮,内核模块就会探测到电源跳线发生了通断变化,然后将每一次通断变化发送消息给运行在用户空间的后台程序;后台程序接收按键消息事件,判断用户是要进行进程检测,还是进程复位,进行相应的进程检测或进程复位处理。采用本发明,极大地方便普通的计算机用户进行应用程序的检测和复位,可降低对服务器管理人员的技术要求,从而节省计算机网络的维护管理费用,本发明所述方法可广泛应用于各种计算机操作系统。
文档编号G06F11/36GK1567233SQ03147719
公开日2005年1月19日 申请日期2003年6月24日 优先权日2003年6月24日
发明者李勇 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1