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

.Net技术 码拜 9年前 (2016-03-11) 1106次浏览
server.exe作为后台进程在运行,另外一个test.exe监控其能否运行,假如在指定时间没有运行则自动启动。
但有时候发现server.exe虽然还在但是已死了,有什么好办法判定能否崩溃了吗?
解决方案

50

本人曾经用一个投巧的办法,假如一个进程它死了,那么它是不会去使用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;
                        }
                    }
                }

50

基本上,你首先判断本人的代码有多少循环。一个好的程序,可能充其量只有一个循环,那么这就比较容易查找问题。而假设你的代码到处都是循环,甚至滥用线程操作长时间阻塞任务(一个线程操作通常应该十几毫秒、几十毫秒就完成),那么这就要认真地编写测试用例来重现问题。
这里的关键是本人想象出具体的测试用例来。别人无法替代你。
你能否有几十个测试用例、运行几千次测试,然后再上线呢?还是仅仅手工调试一两下、看看似乎“没有问题”就上线?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明exe为后台进程能否判断其已崩溃
喜欢 (0)
[1034331897@qq.com]
分享 (0)