写一个Monitor程序,这个程序就干一件事情,看好你的网络爬虫程序,在Monitor中,创建Process对象,去启动你的爬虫程序,然后定时检查这个Process是否还正常,如果不正常就重新启动一个新的! private void CheckProcessStatus() { // check two abnormal cases: // 1. process has existed somehow // 2. process doesn't response this.Cursor=System.Windows.Forms.Cursors.Default; if (process.HasExited) { StartNewProcess("监控没有发现进程,将马上启动它!"); } if(!process.Responding) { // close this one ShutdownProcess("监控发现进程没有响应,强制关闭它!"); // start a fresh one StartNewProcess("监控强制关闭没有响应的进程后,启动一个新的!"); } } // everthing looks fine }
资源消耗
这样很难判断,优化代码
理论上所有winform的未处理异常都可以在Program.cs里解决掉的Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new Form1());static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
//记录异常
}
catch其实我觉得 一般都是可能出异常的位置就需要catch掉的
后台也输出了信息。程序就是不动了
private void CheckProcessStatus()
{
// check two abnormal cases:
// 1. process has existed somehow
// 2. process doesn't response this.Cursor=System.Windows.Forms.Cursors.Default;
if (process.HasExited)
{
StartNewProcess("监控没有发现进程,将马上启动它!");
}
if(!process.Responding)
{
// close this one
ShutdownProcess("监控发现进程没有响应,强制关闭它!");
// start a fresh one
StartNewProcess("监控强制关闭没有响应的进程后,启动一个新的!");
}
}
// everthing looks fine
}
2、启动程序时,用Process一样可以传递参数的。
即 A 被Kill
B 就应该被kill A 启动
B 也启动
A 程序在线程中,每隔5秒,发送一次 信息. 如果B程序没启动,则先启运B
B 程序,开一个线程,判断上一次收到信息的时间,如果超过30秒没有收到了信息了,强制终止A 程序. 然后重新启动A。并发送一个信息,通知道A 程序应该 运行哪个方法。而且A每隔5分钟,保存线程信息。A程序启动时 加载相关参数。看门狗程序基本完成了。现在只等测试了谢谢大家的回复。明天结贴