求windows服务进程的挂死检测机制思路和经验

shuishenyanfu 2012-03-21 09:17:46
本人做了个windows的服务程序,因为要一直运行着,就想知道它有没有正常运行,求检测机制的思路和经验
...全文
293 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
csnd_life 2012-03-21
  • 打赏
  • 举报
回复
不会,你的程序都死锁了,那就是你的程序设计有问题了。这样也不是程序挂了啊。
shuishenyanfu 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 csnd_life 的回复:]

你在程序中启动一个进程会得到一进程句柄吧,然后用WaitForSingleObject等待这个句柄,如果等到,肯定你的程序挂了,然后重启。
[/Quote]
我看了下这个函数的说明,要等到进程停止运行的吧,但如果他只是进入死锁了?就是说任务管理器上还有这个进程,但实际上这个程序没在执行下去了,会等到返回吗?
csnd_life 2012-03-21
  • 打赏
  • 举报
回复
你在程序中启动一个进程会得到一进程句柄吧,然后用WaitForSingleObject等待这个句柄,如果等到,肯定你的程序挂了,然后重启。
shuishenyanfu 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 csnd_life 的回复:]

你另外写一个程序,在这个程序中来启动你想运行的程序,得到这个进程的id,一直实时监控这个id的进程,一挂就报警,或者重启之类的,应该可以吧!
[/Quote]
额,本人菜鸟,怎么监控呢?有api函数还是要自己写一个?
csnd_life 2012-03-21
  • 打赏
  • 举报
回复
你另外写一个程序,在这个程序中来启动你想运行的程序,得到这个进程的id,一直实时监控这个id的进程,一挂就报警,或者重启之类的,应该可以吧!
shuishenyanfu 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 littlecommit 的回复:]

日志仅仅是帮助你了解服务的运行情况的,不需要记录或保留太多的日志,
每次只需要保留一段时间内的日志就可以了,其余的日志都可以实时的删除!
[/Quote]
哎,主要是我这个日志要记录外接硬件的操作的,不能这么干啊,要想像你这样做,就要另写一个日志了
LittleCommit 2012-03-21
  • 打赏
  • 举报
回复
日志仅仅是帮助你了解服务的运行情况的,不需要记录或保留太多的日志,
每次只需要保留一段时间内的日志就可以了,其余的日志都可以实时的删除!
LittleCommit 2012-03-21
  • 打赏
  • 举报
回复
没关系,你可以删一条再记一条啊!
shuishenyanfu 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fishion 的回复:]

另外一个服务可以查看那个log文件的呀
[/Quote]
日志文件的内容可能会挺多的,去看这个文件资源会不会耗太多?
LittleCommit 2012-03-21
  • 打赏
  • 举报
回复
你的意思就是要实现两个服务之间的通信了?
可以借助一些中间的东西:例如文件、共享内存等方式来实现两个服务间的通信。
fishion 2012-03-21
  • 打赏
  • 举报
回复
另外一个服务可以查看那个log文件的呀
fishion 2012-03-21
  • 打赏
  • 举报
回复
检测机制不难,写log文件什么的都可以
shuishenyanfu 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 littlecommit 的回复:]

可以在服务中定时打印一些日志信息,判断是否是正常运行!
[/Quote]
日志是有做,但要人工去看才知道啊,我想另外做一个服务,让它去知道那个服务已经挂死了
shuishenyanfu 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiuchang 的回复:]

是网络服务程序吗?
可以预留一个检测接口,定时发送检查包,服务器程序接收到检查包后会回复一个应答。
如果没有收到应答,则说明出现了问题。
[/Quote]
好像不是网络服务,但有用到socket

LittleCommit 2012-03-21
  • 打赏
  • 举报
回复
可以在服务中定时打印一些日志信息,判断是否是正常运行!
downmooner 2012-03-21
  • 打赏
  • 举报
回复
模拟客户端测试业务逻辑.
jiuchang 2012-03-21
  • 打赏
  • 举报
回复
是网络服务程序吗?
可以预留一个检测接口,定时发送检查包,服务器程序接收到检查包后会回复一个应答。
如果没有收到应答,则说明出现了问题。
赵4老师 2012-03-21
  • 打赏
  • 举报
回复
每隔一定时间比如一分钟写一条日志到文件中。
检测程序发现此日志文件的长度三分钟不变就执行以下批处理:
taskkill /IM 服务进程可执行程序名.exe
net start 服务名
shuishenyanfu 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 csnd_life 的回复:]

不会,你的程序都死锁了,那就是你的程序设计有问题了。这样也不是程序挂了啊。
[/Quote]

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧