本文實例講述了C#獲取進程或線程相關信息的方法。分享給大家供大家參考。具體實現方法如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;namespace ConsoleApp{ class ProcessDo { /// <summary> /// 獲取進程相關信息 /// </summary> public static void GetProcessInfomation() { Process pro = Process.GetProcessesByName("QQ")[0]; Console.WriteLine("進程名稱:" + pro.ProcessName); Console.WriteLine("進程ID:" + pro.Id.ToString()); Console.WriteLine("啟動時間:" + pro.StartTime.ToLongDateString() + pro.StartTime.ToLongTimeString()); Console.WriteLine("是否響應:" + pro.Responding.ToString()); Console.WriteLine("關聯進程句柄:" + pro.Handle.ToString()); Console.WriteLine("進程打開的句柄數:" + pro.HandleCount.ToString()); Console.WriteLine("主窗口句柄:" + pro.MainWindowHandle.ToString()); Console.WriteLine("主窗口標題:" + pro.MainWindowTitle); Console.WriteLine("模塊數量:" + pro.Modules.Count.ToString()); Console.WriteLine("基本優先級:" + pro.BasePriority.ToString()); Console.WriteLine("提升優先級:" + pro.PriorityBoostEnabled.ToString()); Console.WriteLine("處理器:" + pro.ProcessorAffinity.ToInt32().ToString()); Console.WriteLine("最小工作集:" + pro.MinWorkingSet.ToInt32().ToString()); Console.WriteLine("最大工作集:" + pro.MaxWorkingSet.ToInt32().ToString()); Console.WriteLine("工作集:" + pro.WorkingSet.ToString()); Console.WriteLine("峰值工作集:" + pro.PeakWorkingSet.ToString()); Console.WriteLine("專用內存大?。? + pro.PrivateMemorySize.ToString()); Console.WriteLine("未分頁內存大?。? + pro.NonpagedSystemMemorySize.ToString()); Console.WriteLine("分頁內存大?。? + pro.PagedMemorySize.ToString()); Console.WriteLine("峰值分頁內存大?。? + pro.PeakPagedMemorySize.ToString()); Console.WriteLine("虛擬內存大小:" + pro.VirtualMemorySize.ToString()); Console.WriteLine("峰值虛擬內存大?。? + pro.PeakVirtualMemorySize.ToString()); Console.WriteLine("占用時間:" + pro.TotalProcessorTime.ToString()); Console.WriteLine("特權占用時間:" + pro.PrivilegedProcessorTime.ToString()); Console.WriteLine("用戶占用時間:" + pro.UserProcessorTime.ToString()); } /// <summary> /// 進程的線程詳細信息 /// </summary> public static void GetProcessThreadInfomation() { Process pro = Process.GetProcessesByName("QQ")[0]; Console.WriteLine("QQ程序進程的線程詳細信息如下:"); int length = pro.Threads.Count; for (int i = 0; i < length; i++) { var thread = pro.Threads[i]; Console.WriteLine("標識符:" + thread.Id.ToString()); Console.WriteLine("基本優先級:" + thread.BasePriority.ToString()); Console.WriteLine("當前優先級:" + thread.CurrentPriority.ToString()); Console.WriteLine("內存地址:" + thread.StartAddress.ToInt32()); Console.WriteLine("啟動時間:" + thread.StartTime.ToString()); Console.WriteLine("使用時間:" + thread.UserProcessorTime.ToString()); Console.Write("當前狀態:"); switch (thread.ThreadState) { case ThreadState.Initialized: Console.WriteLine("線程已經初始化但尚未啟動"); break; case ThreadState.Ready: Console.WriteLine("線程準備在下一個可用的處理器上運行"); break; case ThreadState.Running: Console.WriteLine("當前正在使用處理器"); break; case ThreadState.Standby: Console.WriteLine("線程將要使用處理器"); break; case ThreadState.Terminated: Console.WriteLine("線程已完成執行并退出"); break; case ThreadState.Transition: Console.WriteLine("線程在可以執行錢等待處理器之外的資源"); break; case ThreadState.Unknown: Console.WriteLine("狀態未知"); break; case ThreadState.Wait: Console.WriteLine("正在等待外圍操作完成或者資源釋放"); break; default: break; } if (thread.ThreadState == ThreadState.Wait) { Console.Write("等待原因:"); switch (thread.WaitReason) { case ThreadWaitReason.EventPairHigh: Console.WriteLine("線程正在等待事件對高"); break; case ThreadWaitReason.EventPairLow: Console.WriteLine("線程正在等待事件對低"); break; case ThreadWaitReason.ExecutionDelay: Console.WriteLine("線程執行延遲"); break; case ThreadWaitReason.Executive: Console.WriteLine("線程正在等待計劃程序"); break; case ThreadWaitReason.FreePage: Console.WriteLine("線程正在等待可用的虛擬內存頁"); break; case ThreadWaitReason.LpcReceive: Console.WriteLine("線程正在等待本地過程調用到達"); break; case ThreadWaitReason.LpcReply: Console.WriteLine("線程正在等待對本地過程調用的回復到達"); break; case ThreadWaitReason.PageIn: Console.WriteLine("線程正在等待虛擬內存頁到達內存"); break; case ThreadWaitReason.PageOut: Console.WriteLine("線程正在等待虛擬內存頁寫入磁盤"); break; case ThreadWaitReason.Suspended: Console.WriteLine("線程執行暫停"); break; case ThreadWaitReason.SystemAllocation: Console.WriteLine("線程正在等待系統分配"); break; case ThreadWaitReason.Unknown: Console.WriteLine("線程因位置原因而等待"); break; case ThreadWaitReason.UserRequest: Console.WriteLine("線程正在等待用戶請求"); break; case ThreadWaitReason.VirtualMemory: Console.WriteLine("線程正在等待系統分配虛擬內存"); break; default: break; } } Console.WriteLine(); } } /// <summary> /// 限制應用程序運行時間 /// 即關聯程序超出設置的運行將自動關閉 /// </summary> public static void GetKillAppForWaitTime() { Process proc = new Process(); proc.StartInfo = new ProcessStartInfo(@"C:/Documents and Settings/zkk/桌面/mysql_20120925.sql"); //啟動應用程序 proc.Start(); //等待程序師徒完成載入 proc.WaitForInputIdle(); //等待程序結束執行 proc.WaitForExit(3000); //如果程序在時間期限之前關閉,HasExited將會是true if (proc.HasExited == false) { //測試程序是否已經停止回應 if (proc.Responding) { //程序有回應,關閉主視圖 proc.CloseMainWindow(); } else { //如果程序沒有回應,將強制關閉 proc.Kill(); } } } }}
希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答