C#獲取進(jìn)程或線程相關(guān)信息的方法
本文實(shí)例講述了C#獲取進(jìn)程或線程相關(guān)信息的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApp
{
class ProcessDo
{
/// <summary>
/// 獲取進(jìn)程相關(guān)信息
/// </summary>
public static void GetProcessInfomation()
{
Process pro = Process.GetProcessesByName("QQ")[0];
Console.WriteLine("進(jìn)程名稱:" + pro.ProcessName);
Console.WriteLine("進(jìn)程ID:" + pro.Id.ToString());
Console.WriteLine("啟動時(shí)間:" + pro.StartTime.ToLongDateString() + pro.StartTime.ToLongTimeString());
Console.WriteLine("是否響應(yīng):" + pro.Responding.ToString());
Console.WriteLine("關(guān)聯(lián)進(jìn)程句柄:" + pro.Handle.ToString());
Console.WriteLine("進(jìn)程打開的句柄數(shù):" + pro.HandleCount.ToString());
Console.WriteLine("主窗口句柄:" + pro.MainWindowHandle.ToString());
Console.WriteLine("主窗口標(biāo)題:" + pro.MainWindowTitle);
Console.WriteLine("模塊數(shù)量:" + pro.Modules.Count.ToString());
Console.WriteLine("基本優(yōu)先級:" + pro.BasePriority.ToString());
Console.WriteLine("提升優(yōu)先級:" + 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("專用內(nèi)存大?。? + pro.PrivateMemorySize.ToString());
Console.WriteLine("未分頁內(nèi)存大小:" + pro.NonpagedSystemMemorySize.ToString());
Console.WriteLine("分頁內(nèi)存大?。? + pro.PagedMemorySize.ToString());
Console.WriteLine("峰值分頁內(nèi)存大小:" + pro.PeakPagedMemorySize.ToString());
Console.WriteLine("虛擬內(nèi)存大?。? + pro.VirtualMemorySize.ToString());
Console.WriteLine("峰值虛擬內(nèi)存大?。? + pro.PeakVirtualMemorySize.ToString());
Console.WriteLine("占用時(shí)間:" + pro.TotalProcessorTime.ToString());
Console.WriteLine("特權(quán)占用時(shí)間:" + pro.PrivilegedProcessorTime.ToString());
Console.WriteLine("用戶占用時(shí)間:" + pro.UserProcessorTime.ToString());
}
/// <summary>
/// 進(jìn)程的線程詳細(xì)信息
/// </summary>
public static void GetProcessThreadInfomation()
{
Process pro = Process.GetProcessesByName("QQ")[0];
Console.WriteLine("QQ程序進(jìn)程的線程詳細(xì)信息如下:");
int length = pro.Threads.Count;
for (int i = 0; i < length; i++)
{
var thread = pro.Threads[i];
Console.WriteLine("標(biāo)識符:" + thread.Id.ToString());
Console.WriteLine("基本優(yōu)先級:" + thread.BasePriority.ToString());
Console.WriteLine("當(dāng)前優(yōu)先級:" + thread.CurrentPriority.ToString());
Console.WriteLine("內(nèi)存地址:" + thread.StartAddress.ToInt32());
Console.WriteLine("啟動時(shí)間:" + thread.StartTime.ToString());
Console.WriteLine("使用時(shí)間:" + thread.UserProcessorTime.ToString());
Console.Write("當(dāng)前狀態(tài):");
switch (thread.ThreadState)
{
case ThreadState.Initialized:
Console.WriteLine("線程已經(jīng)初始化但尚未啟動");
break;
case ThreadState.Ready:
Console.WriteLine("線程準(zhǔn)備在下一個可用的處理器上運(yùn)行");
break;
case ThreadState.Running:
Console.WriteLine("當(dāng)前正在使用處理器");
break;
case ThreadState.Standby:
Console.WriteLine("線程將要使用處理器");
break;
case ThreadState.Terminated:
Console.WriteLine("線程已完成執(zhí)行并退出");
break;
case ThreadState.Transition:
Console.WriteLine("線程在可以執(zhí)行錢等待處理器之外的資源");
break;
case ThreadState.Unknown:
Console.WriteLine("狀態(tài)未知");
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("線程執(zhí)行延遲");
break;
case ThreadWaitReason.Executive:
Console.WriteLine("線程正在等待計(jì)劃程序");
break;
case ThreadWaitReason.FreePage:
Console.WriteLine("線程正在等待可用的虛擬內(nèi)存頁");
break;
case ThreadWaitReason.LpcReceive:
Console.WriteLine("線程正在等待本地過程調(diào)用到達(dá)");
break;
case ThreadWaitReason.LpcReply:
Console.WriteLine("線程正在等待對本地過程調(diào)用的回復(fù)到達(dá)");
break;
case ThreadWaitReason.PageIn:
Console.WriteLine("線程正在等待虛擬內(nèi)存頁到達(dá)內(nèi)存");
break;
case ThreadWaitReason.PageOut:
Console.WriteLine("線程正在等待虛擬內(nèi)存頁寫入磁盤");
break;
case ThreadWaitReason.Suspended:
Console.WriteLine("線程執(zhí)行暫停");
break;
case ThreadWaitReason.SystemAllocation:
Console.WriteLine("線程正在等待系統(tǒng)分配");
break;
case ThreadWaitReason.Unknown:
Console.WriteLine("線程因位置原因而等待");
break;
case ThreadWaitReason.UserRequest:
Console.WriteLine("線程正在等待用戶請求");
break;
case ThreadWaitReason.VirtualMemory:
Console.WriteLine("線程正在等待系統(tǒng)分配虛擬內(nèi)存");
break;
default:
break;
}
}
Console.WriteLine();
}
}
/// <summary>
/// 限制應(yīng)用程序運(yùn)行時(shí)間
/// 即關(guān)聯(lián)程序超出設(shè)置的運(yùn)行將自動關(guān)閉
/// </summary>
public static void GetKillAppForWaitTime()
{
Process proc = new Process();
proc.StartInfo = new ProcessStartInfo(@"C:\Documents and Settings\zkk\桌面\mysql_20120925.sql");
//啟動應(yīng)用程序
proc.Start();
//等待程序師徒完成載入
proc.WaitForInputIdle();
//等待程序結(jié)束執(zhí)行
proc.WaitForExit(3000);
//如果程序在時(shí)間期限之前關(guān)閉,HasExited將會是true
if (proc.HasExited == false)
{
//測試程序是否已經(jīng)停止回應(yīng)
if (proc.Responding)
{
//程序有回應(yīng),關(guān)閉主視圖
proc.CloseMainWindow();
}
else
{
//如果程序沒有回應(yīng),將強(qiáng)制關(guān)閉
proc.Kill();
}
}
}
}
}
希望本文所述對大家的C#程序設(shè)計(jì)有所幫助。
欄 目:C#教程
下一篇:C#實(shí)現(xiàn)綁定Combobox的方法
本文標(biāo)題:C#獲取進(jìn)程或線程相關(guān)信息的方法
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/7027.html
您可能感興趣的文章
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并打開的方法
- 01-10C#實(shí)現(xiàn)遠(yuǎn)程關(guān)閉計(jì)算機(jī)或重啟計(jì)算機(jī)的方法
- 01-10C#調(diào)用dos窗口獲取相關(guān)信息的方法
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10C#實(shí)現(xiàn)讀取被進(jìn)程占用的文件實(shí)現(xiàn)方法
- 01-10C#獲取任務(wù)欄顯示進(jìn)程的方法
- 01-10C#刪除只讀文件或文件夾(解決File.Delete無法刪除文件)
- 01-10C#及WPF獲取本機(jī)所有字體和顏色的方法
- 01-10C#獲取動態(tài)生成的CheckBox值
- 01-10C#獲取網(wǎng)頁源代碼的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已


