server.exe作为后台进程在运行,另外一个test.exe监控其能否运行,假如在指定时间没有运行则自动启动。
但有时候发现server.exe虽然还在但是已死了,有什么好办法判定能否崩溃了吗?
但有时候发现server.exe虽然还在但是已死了,有什么好办法判定能否崩溃了吗?
解决方案
50
本人曾经用一个投巧的办法,假如一个进程它死了,那么它是不会去使用cpu的,那么它的cpu时间应该是0或很低。
因此本人曾经使用这种方式来判断winrar.exe已经压缩完一个任务:
因此本人曾经使用这种方式来判断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
基本上,你首先判断本人的代码有多少循环。一个好的程序,可能充其量只有一个循环,那么这就比较容易查找问题。而假设你的代码到处都是循环,甚至滥用线程操作长时间阻塞任务(一个线程操作通常应该十几毫秒、几十毫秒就完成),那么这就要认真地编写测试用例来重现问题。
这里的关键是本人想象出具体的测试用例来。别人无法替代你。
你能否有几十个测试用例、运行几千次测试,然后再上线呢?还是仅仅手工调试一两下、看看似乎“没有问题”就上线?
这里的关键是本人想象出具体的测试用例来。别人无法替代你。
你能否有几十个测试用例、运行几千次测试,然后再上线呢?还是仅仅手工调试一两下、看看似乎“没有问题”就上线?