C#获取进程或线程相关信息的方法
本文实例讲述了C#获取进程或线程相关信息的方法。分享给大家供大家参考。具体实现方法如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Diagnostics;
namespaceConsoleApp
{
classProcessDo
{
///<summary>
///获取进程相关信息
///</summary>
publicstaticvoidGetProcessInfomation()
{
Processpro=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>
publicstaticvoidGetProcessThreadInfomation()
{
Processpro=Process.GetProcessesByName("QQ")[0];
Console.WriteLine("QQ程序进程的线程详细信息如下:");
intlength=pro.Threads.Count;
for(inti=0;i<length;i++)
{
varthread=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)
{
caseThreadState.Initialized:
Console.WriteLine("线程已经初始化但尚未启动");
break;
caseThreadState.Ready:
Console.WriteLine("线程准备在下一个可用的处理器上运行");
break;
caseThreadState.Running:
Console.WriteLine("当前正在使用处理器");
break;
caseThreadState.Standby:
Console.WriteLine("线程将要使用处理器");
break;
caseThreadState.Terminated:
Console.WriteLine("线程已完成执行并退出");
break;
caseThreadState.Transition:
Console.WriteLine("线程在可以执行钱等待处理器之外的资源");
break;
caseThreadState.Unknown:
Console.WriteLine("状态未知");
break;
caseThreadState.Wait:
Console.WriteLine("正在等待外围操作完成或者资源释放");
break;
default:
break;
}
if(thread.ThreadState==ThreadState.Wait)
{
Console.Write("等待原因:");
switch(thread.WaitReason)
{
caseThreadWaitReason.EventPairHigh:
Console.WriteLine("线程正在等待事件对高");
break;
caseThreadWaitReason.EventPairLow:
Console.WriteLine("线程正在等待事件对低");
break;
caseThreadWaitReason.ExecutionDelay:
Console.WriteLine("线程执行延迟");
break;
caseThreadWaitReason.Executive:
Console.WriteLine("线程正在等待计划程序");
break;
caseThreadWaitReason.FreePage:
Console.WriteLine("线程正在等待可用的虚拟内存页");
break;
caseThreadWaitReason.LpcReceive:
Console.WriteLine("线程正在等待本地过程调用到达");
break;
caseThreadWaitReason.LpcReply:
Console.WriteLine("线程正在等待对本地过程调用的回复到达");
break;
caseThreadWaitReason.PageIn:
Console.WriteLine("线程正在等待虚拟内存页到达内存");
break;
caseThreadWaitReason.PageOut:
Console.WriteLine("线程正在等待虚拟内存页写入磁盘");
break;
caseThreadWaitReason.Suspended:
Console.WriteLine("线程执行暂停");
break;
caseThreadWaitReason.SystemAllocation:
Console.WriteLine("线程正在等待系统分配");
break;
caseThreadWaitReason.Unknown:
Console.WriteLine("线程因位置原因而等待");
break;
caseThreadWaitReason.UserRequest:
Console.WriteLine("线程正在等待用户请求");
break;
caseThreadWaitReason.VirtualMemory:
Console.WriteLine("线程正在等待系统分配虚拟内存");
break;
default:
break;
}
}
Console.WriteLine();
}
}
///<summary>
///限制应用程序运行时间
///即关联程序超出设置的运行将自动关闭
///</summary>
publicstaticvoidGetKillAppForWaitTime()
{
Processproc=newProcess();
proc.StartInfo=newProcessStartInfo(@"C:\DocumentsandSettings\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#程序设计有所帮助。