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();
                }
            }
        }
    }
}
相關文章
相關標籤/搜索