进程(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();
}
}

  输出结果如下:

  

C# Process类_进程_应用程序域与上下文之间的关系的更多相关文章

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

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

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

    原文转载链接:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html Written by:风尘浪子 引言 本文主要是介绍进程( ...

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

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

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

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

  5. C#综合细说进程、应用程序域与上下文

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

  6. C#使用Process类杀死进程,执行命令等

    c#之process类相关整理 一.根据进程名获取进程的用户名? 需要添加对 System.Management.dll 的引用 using System.Diagnostics; using Sys ...

  7. 并发编程(二)--利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道

    一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 2.mu ...

  8. 并发编程(二)——利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道

    Process类与开启进程.守护进程.互斥锁 一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模 ...

  9. 10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析

    4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init(& ...

随机推荐

  1. win8、win8.1官方版本、及安装密钥

    云盘地址:Windows 8 简体中文专业版+核心版 MSDN 正式版(32位)http://pan.baidu.com/s/1eQgiAiQSHA1:0C4A168E37E38EFB59E88443 ...

  2. C51变量的存储

    一.全局变量和局部变量 全局变量和局部变量的区别在于作用域的不同.此外还有静态全局变量和静态局部变量. 全局变量作用域为全局,在一个源文件中定义,其他的源文件也可以应用.在其他的源文件中使用exter ...

  3. Qt自定义圆周动画(360 10.0 的模仿作者写的)

    由于项目需求,需要把一张图片做圆周运动,用到了属性动画,坐标计算等. 在编写代码的过程中,由于太长时间没用sin,cos函数忘了是用弧度为单位,汗呀 下面把代码贴出来 /* * 圆周运动动画 * */ ...

  4. Winform不用窗体之间传值

    1 先构建一个类,内容如下: namespace TravelForm { public sealed class Setting { private static volatile Setting ...

  5. jquery使用总结

    jquery使用总结-常用DOM操作 (1)查询或设置元素属性操作 html()   //获取匹配元素集合中的第1个元素 html(htmlString)  //为匹配集合中的所有元素设置内容 tex ...

  6. c++ 10

    一.二叉树 1.基本特征 1)树型结构的最简模型,每个节点最多有两个子节点--左子节点和右子节点. 2)单根性,每个子节点有且仅有一个父节点,整棵树有且仅有一个根节点. 3)递归性,以任何一个节点为根 ...

  7. 《Java程序员面试笔试宝典》之Java变量命名有哪些规则

    在Java语言中,变量名.函数名.数组名统称为标识符,Java语言规定标识符只能由字母(a~z,A~Z).数字(0~9).下划线(_)和$组成,并且标识符的第一个字符必须是字母.下划线或$.此外,标识 ...

  8. ListView之BaseAdapter

    BaseAdapter可以实现自定义的丰富子项视图,本文实现如下所示结果: 实现代码: /* ListView :列表 BaseAdapter 通用的基础适配器 * * */ public class ...

  9. Jquery_Ajax文件上传

    如何实现jQuery的Ajax文件上传,PHP如实文件上传.AJAX上传文件,PHP上传文件. [PHP文件上传] 在开始之前,我觉得是有必要把通WEB上传文件的原理简单说一下的.实际上,在这里不管是 ...

  10. vim 的配色方案

    浅色: http://www.vimninjas.com/2012/09/14/10-light-colors/ 深色: http://www.vimninjas.com/2012/08/26/10- ...