exe为后台进程能否判断其已崩溃?

shsyzl007 2016-05-20 03:22:40
server.exe作为后台进程在运行,另外一个test.exe监控其是否运行,如果在指定时间没有运行则自动启动。
但有时候发现server.exe虽然还在但是已死了,有什么好办法判定是否崩溃了吗?
...全文
224 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shsyzl007 2016-05-20
  • 打赏
  • 举报
回复
楼上的都太复杂,我现在在弄进程间通讯,
  • 打赏
  • 举报
回复
5楼的方法是比较正统的方法,server.exe定时向test.exe发送心跳数据,如果test.exe一段时间没有收到心跳数据吗,则重启server.exe。网络通信中服务器监测下位机是否在线就是这样做的。
E次奥 2016-05-20
  • 打赏
  • 举报
回复
运行两个exe 互相心跳监控
shsyzl007 2016-05-20
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
[quote=引用 楼主 shsyzl007 的回复:] 发现server.exe虽然还在但是已死了
没见过“虽然还在但是已死”的进程。所谓“已死”一定是你的代码的某一行的问题,不能推卸给环境。[/quote]exe已经不在运行了,但是进程还在。这种情况很常见啊。比如exe崩了后如果你不点击确认进程还是存在的但进程已经不在运行了
  • 打赏
  • 举报
回复
基本上,你首先判断自己的代码有多少循环。一个好的程序,可能充其量只有一个循环,那么这就比较容易查找问题。而假设你的代码到处都是循环,甚至滥用线程操作长时间阻塞任务(一个线程操作通常应该十几毫秒、几十毫秒就完成),那么这就要认真地编写测试用例来重现问题。 这里的关键是自己想象出具体的测试用例来。别人无法替代你。 你是否有几十个测试用例、运行几千次测试,然后再上线呢?还是仅仅手工调试一两下、看看似乎“没有问题”就上线?
圣殿骑士18 2016-05-20
  • 打赏
  • 举报
回复
我曾经用一个投巧的办法,如果一个进程它死了,那么它是不会去使用cpu的,那么它的cpu时间应该是0或者很低。 因此我曾经使用这种方式来判断winrar.exe已经压缩完一个任务:

//如果是winrar执行,则需要做额外的等待
                string processName = "WinRAR";
                Process[] process = Process.GetProcessesByName(processName);
                if (process.Count() > 0)
                {
                    Thread.Sleep(1000);
                    foreach (var p in process)
                    {
                        TimeSpan span = p.UserProcessorTime;
                        while (true)
                        {
                            Thread.Sleep(1000);
                            TimeSpan newSpan = p.UserProcessorTime;
                            if ((newSpan - span).TotalMilliseconds < 100)    //当winrar很少消耗cpu时,认为其已停止工作,杀死此进程
                            {
                                p.Kill();
                                break;
                            }
                            span = newSpan;
                        }
                    }
                }
  • 打赏
  • 举报
回复
引用 楼主 shsyzl007 的回复:
发现server.exe虽然还在但是已死了
没见过“虽然还在但是已死”的进程。所谓“已死”一定是你的代码的某一行的问题,不能推卸给环境。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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