引言

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

目录

一、进程的概念与作用

二、应用程序域

三、深入了解.NET上下文

四、进程应用程序域与线程的关系

一、进程的概念与作用

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

1.1 Process 的属性与方法

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

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

 表1.0

除了上述属性,Process类也定义了下列经常使用的方法:

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

表1.1

Process类的详细信息可以参考 http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.aspx
下面将举例介绍一下Process的使用方式

1.2 建立与销毁进程

利用 Start 与Kill 方法可以简单建立或者销毁进程,下面例子就是利用 Start 方法启动记事本的进程,并打开File.txt文件。2秒钟以后,再使用 Kill 方法销毁进程,并关闭记事本。

         static void Main(string[] args){Process process = Process.Start("notepad.exe","File.txt");Thread.Sleep(2000);process.Kill();}

1.3 列举计算机运行中的进程

在表1.0 中可以看到,使用 GetProcesses 方法可以获取本地计算机上正在运行的每一个进程列表。
而进程的 Id 属性是每个进程的唯一标志,通过下面的方法,可以显示当前计算机运行的所有进程信息。
因为篇幅关系,下面例子只获取前10个进程。

 1         static void Main(string[] args)
 2         {
 3             var processList = Process.GetProcesses()
 4                 .OrderBy(x=>x.Id)
 5                 .Take(10);
 6             foreach (var process in processList)
 7                 Console.WriteLine(string.Format("ProcessId is:{0} \t ProcessName is:{1}",
 8                     process.Id, process.ProcessName));
 9             Console.ReadKey();
10         }

运行结果

如果已知进程的Id,就可以通过 GetProcessById 方法获取对应的进程。

         static void Main(string[] args){try{var process = Process.GetProcessById(1772);Console.WriteLine("Process name is:" + process.ProcessName);}catch (ArgumentException ex){Console.WriteLine("Process is nothing!");}Console.ReadKey();}

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

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

1.4 获取进程中的多个模块

在表1.0 中包含了Process类的Modules属性,通过此属性可能获取进程中的多个模块。
这些模块可以是以 *.dll 结尾的程序集,也可以是 *.exe 结尾的可执行程序。
下面的例子就是通过 Process 的 GetCurrentProcess 方法获取当前运行的进程信息,然后显示当前进程的多个模块信息。

1         static void Main(string[] args)
2         {
3             var moduleList = Process.GetCurrentProcess().Modules;
4             foreach (System.Diagnostics.ProcessModule module in moduleList)
5                 Console.WriteLine(string.Format("{0}\n  URL:{1}\n  Version:{2}",
6                     module.ModuleName,module.FileName,module.FileVersionInfo.FileVersion));
7             Console.ReadKey();
8         }

运行结果:

本文转自 leslies2  51CTO博客,原文链接:http://blog.51cto.com/79100812/836719

细说进程、应用程序域与上下文之间的关系(一)——进程的概念与作用相关推荐

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

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提 ...

  2. 2进程之间的关系:进程组,会话,守护进程

     1进程组 一个或多个进程的集合,进程组ID是一个正整数.用来获得当前进程组ID的函数. pid_t getpgid(pid_t pid) pid_t getpgrp(void) 获得父子进程进程 ...

  3. 进程 、进程组、会话、控制终端之间的关系

    一个进程组可以包含多个进程 进程组中的这些进程之间不是孤立的,他们彼此之间或者存在者父子.兄弟关系,或者在功能有相近的联系. 那linux为什么要有进程组呢?其实提供进程组就是方便管理这些进程.假设要 ...

  4. linux+kill+进程和线程,什么是程序,进程和线程?三者之间有何关系?

    进程 进程与线程的历史 进程与线程之间的关系 重点 进程 和 线程的概念 进程和程序关系 cpu在执行程序时什么叫进程 swap 内存的缺页异常 大的异常 小的异常 内存映射mmap 内存泄露 tas ...

  5. 【Linux进程、线程、任务调度】一 Linux进程生命周期 僵尸进程的含义 停止状态与作业控制 内存泄漏的真实含义 task_struct以及task_struct之间的关系

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 文章目录 1 ...

  6. worker进程和task进程区别_worker进程和task进程区别_Storm概念学习系列之Worker、Task、Executor三者之间的关系......

    不多说,直接上干货! Worker.Task.Executor三者之间的关系 Storm集群中的一个物理节点启动一个或者多个Worker进程,集群的Topology都是通过这些Worker进程运行的. ...

  7. 详解窗口句柄,进程ID,进程句柄,窗口与进程之间的关系

    窗口句柄: 在Windows或Linux等操作系统下窗口句柄对应着每个窗口的钥匙,例如,你要对某一个窗口进行操作,你必须知道你要操作哪一个窗口,这里就拿Windows做举例,Windows下几乎会创建 ...

  8. 多CPU ,多核和进程以及多线程之间的关系

    今天开始,这个专题主要讲解 java 并发编程系列,从操作系统的进程.CPU.线程等底层开始, 到java 并发工具类,线程.线程池,并发容器.CAS.AQS等原理.源码和使用均做深入的解析.今天讲 ...

  9. 软考初级程序员易错题:在统一建模语言 (UML)中,( )展现了 一组对象以及它们之间的关系, 给出了系统的静态设计视图或静态进程视图,描述了( )中所建立的事物 实例的静态快照。

    在统一建模语言 (UML)中,( )展现了 一组对象以及它们之间的关系, 给出了系统的静态设计视图或静态进程视图,描述了( )中所建立的事物 实例的静态快照. 知识点: 统一建模语言 (UML) 问题 ...

最新文章

  1. python学习手册笔记——20.迭代和解析
  2. 云原生时代的“精益实践”:企业效能提升10倍“杀手锏
  3. Android在子线程里使用Toast报错Can't toast on a thread that has not called Looper.prepare()
  4. python安装各种插件
  5. OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器
  6. 从零开始打造数据中心的N道门槛 | 又拍干货分享
  7. Python(23)_while循环
  8. 机器学习 —— 概率图模型(CPD)
  9. 使用python语言编写脚本控制freeswitch总结
  10. 基于android的手机点名签到学生请假考勤系统app
  11. html插入swf自动播放,html嵌入播放器,flv视频播放器 Flvplayer.swf 可自动播放参数说明...
  12. spring security面试
  13. 保龄球计分java代码_从 保龄球得分计算方法 浅析 深度学习
  14. python半圆_复合半圆环图只要四句代码搞定
  15. rtl驱动 ubuntu 禁用_转载:Ubuntu 14.04 安装 rtl8188cus 驱动
  16. 【第60题】必学的枚举1-枚举的定义和基本特性
  17. 浅谈String的堆内存和栈内存
  18. 雨林木风 linux操作系统,“雨林木风”操作系统门户正式上线
  19. 嘟嘟牛app算法hook
  20. 超好看的css动画特效实现

热门文章

  1. 鄂维南院士:科学与智能——机器学习的新前沿、应用数学时代的曙光
  2. DeepMind提出基于视觉的强化学习模型,十八般兵器对机器人不在话下
  3. SAP PM 初级系列6 - 任务清单相关的配置
  4. SAP PM入门系列21 - IE07 Equipment List (Multilevel)
  5. 2021年值得关注的5个RPA趋势
  6. 少标签数据学习,54页ppt
  7. Python五种常见的算法,你都了解么
  8. SAP MM 移动类型343不开放给业务人员之思考
  9. 最通俗的机器学习介绍
  10. 前沿科技 | 中科院科学家在关于运动规划的环路机制研究方面获进展