C# 识别响应僵尸进程

C# Identify responding zombie process

环境:

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

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

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

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

问题:

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

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

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

我分析了一个"dead"进程和一个普通进程,区别是alive进程至少有4个TCP连接,dead进程只有2个。 活动进程 = 客户端 -> 应用程序服务器 -> 数据库服务器 死进程 = 应用程序服务器 -> 数据库服务器

所以实际上我正在检索所有 tcp 连接,通过 Linq 过滤它们并分组,以便获得死进程。

代码:

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