读书人

windows系统上的进程监测程序-实现过程

发布时间: 2012-11-13 10:00:51 作者: rapoo

windows系统下的进程监测程序--实现过程记录

单位的客服中心的服务器有个接口程序,这三天都出现了自动退出的情况,这接口程序是管理打进来的电话分配到各值班的客服人员那里,接口程序是由其他公司开发的,以前也出现过自动退出的情况,但开发方一直没给出解决方案。

由于这接口一退出,那外面的用户就打不进电话来,结果用户就投诉到领导那里,领导就骂下面的员工。。。(低人一级就得挨骂,哎)

?

最近三天频繁自动退出,我就产生自己开发一个监测该接口程序的程序。当接口程序自动退出时,就重启服务。本来用java的话,我觉得挺简单的,但服务器上没装jdk,一般服务器不能乱装程序的,我就打消了用java实现的念头,后来一想,其实用linux的命令也很简单,写个shell脚本,几行命令就行了,但服务器是用windows server系统,杯了个具。

?

只能用原始的c语言了。

刚开始时,用c语言实现第一件做的事是:google一下有无c语言版的监测进程程序,当然没有啦,天下哪有这么好的事,拿来就可以用。。。

就转变思路,要监测一个进程,那就要获取当前的进程列表,像进程管理器那样。再找google一下:c语言 获取系统进程

也是没结果。。。

再想一下,如果用java,我就会通过Runtime.exec()来执行dos命令,同理,用c语言怎样执行dos命令呢,找到方法了:

system(char* commandStr);这函数可以用。

第二步是怎样获取系统进程?这个简单一google就知道用dos里的:tasklist命令。

获取了之后就要解析获取到的进程列表,问题又来了,system()函数调用的返回结果是Int,表示执行结果状态。所以我就另辟蹊径,把tasklist的结果重定向到txt文件,再用c语言读文件,本来这里我是想用一条命令就把进程那一行获取出来的,但无奈windows系统不支持管道,还是linux系统牛B啊。

好了,在获取系统当前运行的进程后,就通过dos的一条命令:findstr(类似于linux的find),找出我监测的进程,

再把结果存入一个临时文件里

接下来的工作就是读文件,若文件是0行,则代表监测的进程没启动,这时就启动该进程,若文件有1行,就代表程序正在运行,就等待5分钟再检测。如果文件有大于1行,代表启动多个进程,这是不允许的情况,就先把所有的进程关闭,再开一个进程。

?

程序代码如下:(程序以记事本为demo,notepad.exe)

?
  

读书人网 >windows

热点推荐