C# Process类_进程_应用程序域与上下文之间的关系
进程(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类_进程_应用程序域与上下文之间的关系的更多相关文章
- [转]C#综合揭秘——细说进程、应用程序域与上下文之间的关系
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...
- [C#参考]细说进程、应用程序域与上下文之间的关系
原文转载链接:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html Written by:风尘浪子 引言 本文主要是介绍进程( ...
- C#综合揭秘——细说进程、应用程序域与上下文之间的关系
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...
- 转:C#综合揭秘——细说进程、应用程序域与上下文之间的关系
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...
- C#综合细说进程、应用程序域与上下文
引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提 ...
- C#使用Process类杀死进程,执行命令等
c#之process类相关整理 一.根据进程名获取进程的用户名? 需要添加对 System.Management.dll 的引用 using System.Diagnostics; using Sys ...
- 并发编程(二)--利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道
一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 2.mu ...
- 并发编程(二)——利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道
Process类与开启进程.守护进程.互斥锁 一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模 ...
- 10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析
4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init(& ...
随机推荐
- Qt基于FFmpeg播放本地 H.264(H264)文件(灿哥哥的博客)
最近在弄H264的硬件编解码,基于DM3730,但是为了调试方便,在小红帽上用FFmpeg实现了H264的软件编解码.现在弄了一个Windows的例子,给需要的同学参考一下,如果大家觉得有帮助,可以小 ...
- hidden symbol ... is referenced by DSO
在Linux上编译Qt的时候configure出来的Makefile传递给g++的参数visiblility=hidden,然后就会调用Qt库所使用的第三方库libpng库源代码函数声明添加上__at ...
- codility上的问题 (21) Upsilon 2012
这是我目前最喜欢的codiltiy上的问题之一.问题描述是:给定一个整数数组A,所有的数均不相同.假设下标从0开始,找到一个数组B, 满足A[B[0]] > A[B[1]] > A[B[2 ...
- 字符串转换为float<2>
Configuration OK zjtest7-frontend:/usr/local/logstash-2.3.4/config# ../bin/logstash -f g01.conf Sett ...
- 【CF689D Friends and Subsequences】二分搜索,区间查询
题意:给定两个整数序列a,b,将a,b对齐,问有多少个区间满足a的区间内最大值等于b的区间内最小值. 数据范围:区间长度n属于[1, 200000],序列中的元素在整型范围内 思路:枚举所有n*(n+ ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅱ
2.4.2初级实现 我们知道,基础数据结构是实现优先队列的起点.我们可以是使用有序或无序的数组或链表.在队列较小时,大量使用两种主要操作之一时,或是所操作元素的顺序已知时,它们十分有用.因为这些实现相 ...
- Live555 分析(三):客服端
live555的客服端流程:建立任务计划对象--建立环境对象--处理用户输入的参数(RTSP地址)--创建RTSPClient实例--发出DESCRIBE--发出SETUP--发出PLAY--进入Lo ...
- eclipse在ubuntu13.04下崩溃crash
错误信息: # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0 ...
- [Python学习笔记][第四章Python字符串]
2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...
- NET基础课--泛型(NET之美)
1.泛型,类型或方法的一种抽象概括. 2.泛型类:在类型名后面加一个<>,其中传递占位符,也就是类型参数.where是类型约束 可以再查资料 public class SortHelper ...