public String GetNetwork(Int32 pid) { AppendLog("GetNetwork"); String value = ""; List <int> keys = pid2InfoMap.Keys.ToList(); foreach (int key in keys) { ProcessDynamicInfo ns = pid2InfoMap[key]; value += key + "\tsend:" + ns.ByteSend + ", receive:" + ns.ByteReceive + "\r\n"; } value += "miss packet:" + packetMiss + ", miss byte:" + byteMiss; return(value); }
public ProcessDynamicInfo Clone() { ProcessDynamicInfo value = new ProcessDynamicInfo(); value.ByteSend = this.ByteSend; value.ByteReceive = this.ByteReceive; value.OldByteSend = this.OldByteSend; value.OldByteReceive = this.OldByteReceive; value.TotalProcessorTime = this.TotalProcessorTime; value.OldTotalProcessorTime = this.OldTotalProcessorTime; value.CpuUsage = this.CpuUsage; value.SendSpeed = this.SendSpeed; value.ReceiveSpeed = this.ReceiveSpeed; return(value); }
public String GetProcessInfo(String filter) { AppendLog("GetProcessInfo"); String[] filters = filter.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); XElement root = new XElement("processInfo"); Process[] processes = Process.GetProcesses(); foreach (Process p in processes) { if (filters.Length == 0 || filters.Contains(p.ProcessName) && pid2InfoMap.ContainsKey(p.Id)) { try { ProcessDynamicInfo info = pid2InfoMap[p.Id].Clone(); XElement infoXml = new XElement("info"); infoXml.Add( new XElement("pid", p.Id), new XElement("name", p.ProcessName), new XElement("priority", p.PriorityClass.ToString()), new XElement("cpu", (info.CpuUsage * 100.0).ToString("0.00")), new XElement("mem", (p.WorkingSet64 / 1024).ToString()), new XElement("threadCount", p.Threads.Count), new XElement("send", info.SendSpeed.ToString()), new XElement("receive", info.ReceiveSpeed.ToString()) ); root.Add(infoXml); } catch (Exception ex) { // 这里会捕获到拒绝访问异常,可能对应的进程正在执行,进程的某些属性拒绝访问。 //AppendLog("Error: GetProcessInfo" + ex.Message); } } } return(root.ToString()); }
private void RefreshProcessInfo(Object state) { AppendLog("RefreshProcessInfo"); Process[] processes = Process.GetProcesses(); double coreCount = TerminalInfo.ProcessorCount * 1.0; foreach (Process p in processes) { if (pid2InfoMap.ContainsKey(p.Id)) { try { ProcessDynamicInfo info = pid2InfoMap[p.Id]; info.OldTotalProcessorTime = info.TotalProcessorTime; // 下面的语句会抛出拒绝访问的异常 // 可能是p对应的进程在执行,拒绝访问这个属性。 info.TotalProcessorTime = p.TotalProcessorTime; info.CpuUsage = (info.TotalProcessorTime.TotalSeconds - info.OldTotalProcessorTime.TotalSeconds) / refreshInterval / coreCount; info.ReceiveSpeed = Convert.ToInt32((info.ByteReceive - info.OldByteReceive) / refreshInterval); info.SendSpeed = Convert.ToInt32((info.ByteSend - info.OldByteSend) / refreshInterval); info.OldByteReceive = info.ByteReceive; info.OldByteSend = info.ByteSend; } catch (Exception ex) { //AppendLog("Error: RefreshProcessInfo" + ex.Message); } } else { pid2InfoMap.Add(p.Id, new ProcessDynamicInfo()); } } }
private void ProcessPacketArrival() { while (true) { Packet packet; lock (packetQueue) { while (packetQueue.Count <= 0) { System.Threading.Monitor.Wait(packetQueue); } packet = packetQueue.Dequeue().PayloadPacket; } try { String src = ""; String dst = ""; ulong len = 0; IpPacket ipPacket = packet as IPv4Packet; if (ipPacket == null) { ipPacket = packet as IPv6Packet; } len = (ulong)(ipPacket.TotalLength); src = ipPacket.SourceAddress.ToString(); dst = ipPacket.DestinationAddress.ToString(); if (src.Equals("127.0.0.1") || src.Equals("0.0.0.0")) { src = TerminalInfo.Ipv4; } else if (src.Equals("[::1]")) { src = TerminalInfo.Ipv6; } if (dst.Equals("127.0.0.1") || dst.Equals("0.0.0.0")) { dst = TerminalInfo.Ipv4; } else if (dst.Equals("[::1]")) { dst = TerminalInfo.Ipv6; } Packet payload = packet.PayloadPacket; TcpPacket tcp = payload as TcpPacket; UdpPacket udp = payload as UdpPacket; if (tcp != null) { src += ":" + tcp.SourcePort; dst += ":" + tcp.DestinationPort; } else if (udp != null) { src += ":" + udp.SourcePort; dst += ":" + udp.DestinationPort; } lock (endPoint2PidMap) { bool find = false; if (endPoint2PidMap.ContainsKey(src)) { find = true; Int32 pid = endPoint2PidMap[src]; if (pid2InfoMap.ContainsKey(pid)) { pid2InfoMap[pid].ByteSend += len; } else { ProcessDynamicInfo ns = new ProcessDynamicInfo(); ns.ByteSend = len; pid2InfoMap.Add(pid, ns); } TerminalInfo.ByteSent += len; } if (endPoint2PidMap.ContainsKey(dst)) { find = true; Int32 pid = endPoint2PidMap[dst]; if (pid2InfoMap.ContainsKey(pid)) { pid2InfoMap[pid].ByteReceive += len; } else { ProcessDynamicInfo ns = new ProcessDynamicInfo(); ns.ByteReceive = len; pid2InfoMap.Add(pid, ns); } TerminalInfo.ByteReceived += len; } if (!find) { packetMiss++; byteMiss += len; } } } catch (Exception ex) { AppendLog("Error: ProcessPacketArrival" + ex.Message); } } }