C# 识别响应的僵尸进程

C# 识别响应的僵尸进程,c#,windows,wmi,C#,Windows,Wmi,环境: 用户正在其客户端PC上启动应用程序 应用程序正在连接到应用程序服务器并在服务器上启动进程 用户正在做一些事情,应用程序在客户端PC上崩溃 应用服务器上的进程仍在100%cpu使用率下运行 问题: 是否可以将应用程序服务器上正在运行的进程检测为僵尸进程?僵尸进程仍在响应。 有没有办法从僵尸那里获取端口和IP地址?因此,我可以在特定端口ping客户端 我只是不知道我需要在哪里搜索来识别它,因为这个过程可能需要100%的时间,但这并不意味着它是一个僵尸过程。也许用户正在做一些真实的事情。我只是

环境:

用户正在其客户端PC上启动应用程序

应用程序正在连接到应用程序服务器并在服务器上启动进程

用户正在做一些事情,应用程序在客户端PC上崩溃

应用服务器上的进程仍在100%cpu使用率下运行

问题:

是否可以将应用程序服务器上正在运行的进程检测为僵尸进程?僵尸进程仍在响应。 有没有办法从僵尸那里获取端口和IP地址?因此,我可以在特定端口ping客户端


我只是不知道我需要在哪里搜索来识别它,因为这个过程可能需要100%的时间,但这并不意味着它是一个僵尸过程。也许用户正在做一些真实的事情。我只是需要一个100%安全的方法,我只是不能杀死他们,希望那是一个僵尸。这会给公司造成巨大的损失。

我找到了一个解决方案,我认为这是最好的办法

我分析了一个死进程和一个常规进程,区别在于,活进程至少有4个TCP连接,而死进程只有2个。 活动进程=客户端->应用程序服务器->数据库服务器 死进程=应用程序服务器->数据库服务器

事实上,我正在检索所有tcp连接,通过Linq和group by对它们进行过滤,以获取死进程

代码:


不清楚你想要什么。如果客户端没有启动它,为什么会变成僵尸?是服务器中的另一个进程创建了它,不是吗?任何足够高级的忙循环都无法与有用的工作区分开来。换句话说,如果僵尸不是一个没有响应的过程,那么就定义它。我尽了最大的努力来描述它。。。。客户机正在连接应用程序服务器,并在服务器上创建一个进程来处理数据库和应用程序之间的通信。我只是认为僵尸仍然在响应,因为我仍然得到一些关于它的信息,比如cpu使用率、创建日期等等。。。这需要更长的时间,但我得到了信息。因此,我认为这是一种回应,你不能仅仅从外面偷看,如果你对工作没有很好的定义,就知道一个过程是否有用。告诉应用程序程序员对其进行改进,使断开的客户端连接导致服务器进程自然死亡。总的来说,可以肯定的是,没有一个应用程序不是像一个笨重的数字处理器那样完全占用机器的,它应该在很长的时间内占用100%的CPU。我杀了它,因为它占用了机器5分钟,这通常被认为是合理的推理。
List<TcpProcessRecord> processes = Tcp.GetAllTcpConnections();

            var filteredAnonType = processes.Where(n => n.ProcessName.ToLower().StartsWith(Properties.Settings.Default.ProcessToMonitor.ToLower()))
                                    .GroupBy(x => x.ProcessId).Select(group => new
                                    {
                                        NumberConnections = group.Select(t => t.RemoteAddress).Distinct().Count(),
                                        ProcessID = group.Key,
                                    }).Where(v => v.NumberConnections < Properties.Settings.Default.MinimumConnections);


            List<ProcessZombie> filteredProcesses = (from zombie in filteredAnonType
                                                     select new ProcessZombie(zombie.NumberConnections, zombie.ProcessID)).ToList();