进程、应用程序域与上下文之间的关系

进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。进程之间是相对独立的,一个进程无法直接访问另一个进程的数据(除非分布式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。

  进程可以理解为一个程序的基本边界。

一、Process的常用属性与方法

  在System.Diagnostics命名空间当中存在Process类,专门用于管理进程的开始、结束,访问进程中的模块,获取进程中的线程,设定进程的优先级别等。

  Process类常用属性:

属性 说明
BasePriority 获取关联进程的基本优先级。
ExitCode 获取关联进程终止时指定的值。
ExitTime 获取关联进程退出的时间。
Handle 返回关联进程的本机句柄。
HandleCount 获取由进程打开的句柄数。
HasExited 获取指示关联进程是否已终止的值。
Id 获取关联进程的唯一标识符。
MachineName 获取关联进程正在其上运行的计算机的名称。
MainModule 获取关联进程的主模块。
Modules 获取已由关联进程加载的模块。
PriorityClass 获取或设置关联进程的总体优先级类别。
ProcessName 获取该进程的名称。
StartInfo 获取或设置要传递给Process的Start方法的属性。
StartTime 获取关联进程启动的时间。
SynchronizingObject 获取或设置用于封送由于进程退出事件而发出的事件处理程序调用的对象。
Threads 获取在关联进程中运行的一组线程

  Process类常用方法:

方法 说明
GetProcessById 创建新的 Process 组件,并将其与您指定的现有进程资源关联。
GetProcessByName 创建多个新的 Process 组件,并将其与您指定的现有进程资源关联。
GetCurrentProcess 获取新的 Process 组件并将其与当前活动的进程关联。
GetProcesses 获取本地计算机上正在运行的每一个进程列表。
Start 启动一个进程。
Kill 立即停止关联的进程。
Close 释放与此组件关联的所有资源。
WaitForExit 指示 Process 组件无限期地等待关联进程退出。

Microsoft关于Process的说明:http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.aspx

二、建立与销毁进程

  利用Start与Kill方法可以简单建立或者销毁进程,下面以一个例子:用Start方法启动记事本的进程,并打开File.txt文件。2秒钟以后使用Kill方法销毁进程并关闭记事本。然后又用google浏览器打开百度首页两秒后关闭。

    public class Program
    {
        static void Main(string[] args)
        {
            //打开记事本
            Process process = Process.Start("notepad.exe", "D:123.txt");
            Thread.Sleep(2000);
            process.Kill();

            //打开google浏览器,并打开百度
            Process process2 = Process.Start("chrome.exe", "http://www.baidu.com");
            Thread.Sleep(20000);
            process.Kill();

            Console.ReadKey();
        }
    }

  显示如下:

  

三、显示计算机运行中的进程

  使用 GetProcesses 方法可以获取本地计算机上正在运行的每一个进程列表。而进程的 Id 属性是每个进程的唯一标志,通过下面的方法,可以显示当前计算机运行的所有进程信息。

    public class Program
    {
        static void Main(string[] args)
        {
            var processList = Process.GetProcesses();
            foreach (var process in processList)
            {
                Console.WriteLine(string.Format("ProcessId is:{0} \t ProcessName is:{1}", process.Id, process.ProcessName));
            }

            Console.ReadKey();
        }
    }

  输出结果如下:

  

  如果已经知道了进程的Id,就可以通过GetProcessId方法获取对应的进程:

    public class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Process p = Process.GetProcessById(6888);
                Console.WriteLine(p.ProcessName);   //输出 QQExternal
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }

            Console.ReadKey();
        }
    }

  同样地,你也可能通过GetProcessByName方法获取多个对应名称的进程:

        static void Main(string[] args)
        {
            Process[] pArr = Process.GetProcessesByName("QQExternal");
            Console.WriteLine(pArr[0].Id);   //输出 6888

            Console.ReadKey();
        }

  注意:如果不能找到当前ID的进程,系统就会抛出ArgumentException异常。所以使用方法 GetProcessById 获取进程时应该包含在 try{...} catch{..} 之内。

四、获取进程中的多个模块

  Process类中有一个Modules属性,通过此属性可能获取进程中的多个模块。

  这些模块可以是以*.dll结尾的程序集,也可以使*.exe结尾的可执行程序。

  通过Process的GetCurrentProcess方法可以获取当前运行的进程信息,然后显示当前进程的多个模块信息。

    class Program
    {
        static void Main(string[] args)
        {
            var modulelist = Process.GetCurrentProcess().Modules;
            foreach (ProcessModule pm in modulelist)
            {
                Console.WriteLine("模块名:" + pm.ModuleName + "文件名:" + pm.FileName + "版本号:" + pm.FileVersionInfo.FileVersion);
            }

            Console.ReadKey();
        }
    }

  输出结果如下:

  

进程、应用程序域与上下文之间的关系,布布扣,bubuko.com

时间: 2024-08-30 14:17:23

进程、应用程序域与上下文之间的关系的相关文章

转:C#综合揭秘——细说进程、应用程序域与上下文之间的关系

原文:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助. 一.进程的概念与作用 进程(Process)是Windo

细说进程、应用程序域与上下文之间的关系

引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助.因为时间仓促,文中有错误的地方敬请点评. 目录 一.进程的概念与作用 二.应用程序域 三.深入了解.NET上下文 四.进程应用程序域与线程的关系 一.进程的概念与作用 进程(Proces

[C#参考]细说进程、应用程序域与上下文之间的关系

原文转载链接:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html Written by:风尘浪子 引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助. 在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助. 因为时

[转]C#综合揭秘——细说进程、应用程序域与上下文之间的关系

引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助.因为时间仓促,文中有错误的地方敬请点评. 目录 一.进程的概念与作用 二.应用程序域 三.深入了解.NET上下文 四.进程应用程序域与线程的关系 一.进程的概念与作用 进程(Proces

进程/线程/堆/栈之间的关系

进程线程针对系统而言的和数据结构无关.进程是一段代码,是操作系统资源分配基本概念.是调度和运行的基本单位,进程可以有多个任务每个任务是一个线程: 堆栈针对的是数据结构.栈是右进右出函数变量.局部变量都属于栈,堆是树形结构类似于字典的目录对象数组都属于堆,线程中会用到栈和堆. 原文地址:https://www.cnblogs.com/wangdadada/p/12323125.html

进程、应用程序域、线程的相互关系

4.1 跨AppDomain的线程 线程存在于进程当中,它在不同的时刻可以运行于多个不同的AppDomain当中.它是进程中的基本执行单元,在进程入口执行的第一个线程被视为这个进程的主线程.在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时 系统就会自动创建一个主线程.线程主要是由CPU寄存器.调用栈和线程本地存储器(Thread Local Storage,TLS)组成的.CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存

做饭与进程线程之间的关系

炒菜与进程线程之间的关系 body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10px; padding-bottom: 10px; background-color: white; padding: 30px; } body > *:first-child { margin-top: 0 !important; } body > *:last-chi

进程与线程之间的关系

看到一种说法是"一个程序至少有一个进程,一个进程至少有一个线程",这种把程序与进程,进程与线程的关系混淆的说法是错误的. 程序(program)只能有一个进程,一个进程就是一个程序.有人说,我打开一个程序,比如chrome,有十多个进程呢,这是咋回事.那就是十多个程序,操作系统给他们分配了彼此独立的内存,相互执行不受彼此约束,分配同样时间的CPU.对于用户而言,他们是一个整体,我们通常称之为应用程序(application).对于计算机而言,一个进程就是一个程序,多个进程(比如一个浏览

进程与线程之间的关系和区别 及 CPU调度

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. 进程和线程的关系: (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程. (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源. (3)处理机分给线程,即真正在处理机上运行的是线程. (4)线程在执行过程中,需要协作同步.不同进程的线程间要利用消息通信的办法实现同步.