C#识别响应的僵尸进程

时间:2017-03-20 15:57:59

标签: c# windows wmi

环境:

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

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

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

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

问题:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

所以实际上我正在检索所有tcp连接,通过Linq和group by过滤它们,以便得到死进程。

代码:

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();