C#进程
进程和线程是分不开的,本文主要描述进程。
1. 简单介绍:
进程:
- 进程是操作系统级别的一个基本概念,可以将其简单地理解为“正在运行的程序”,例:
1.qq程序 VS 正在运行的qq进程;
2.火车 VS 正在驶过的一辆火车; - 进程是资源调度和分配的基本单位。
- 进程之间是相互独立的。
- 在操作系统级别的管理中,利用Process类可启动、停止本机或远程进程。
进程和线程的关系:
一个车间相当于一个进程,车间内工人相当于线程
2. 进程管理(Process类)
1、Process类位于System.Diagnostics命名空间下。
2、 对本机(本地计算机)的操作:
- 可以启动、终止某个进程;
- 可以查看进程相关信息,如CPU利用率等;
- 可以查看进程工作状态;
3、 对远程计算机的操作:
- 可以查看远程计算机相关信息;
- 无法直接启动、终止远程计算机;
4、 程序和程序:
在一个程序中处理其他的程序(例如调用其他.exe文件、
快捷方式等),实际上就是对进程进行管理。
3. 进程演示:
(1)启动进程:
例子:
1.举例:
①创建一个Process组件的实例,例如:
Process myProcess = new Process();
②指定要运行的应用程序名以及传递的参数:
myProcess.StartInfo.FileName = \"文件名\";myProcess.StartInfo.Arguments = \"参数\";myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
③调用该实例的Start方法启动该进程。
myProcess.Start();
2.举例:
①直接启动进程
Process.Start(“Notpad.exe”);
启动进程涉及的方法和属性:
Start方法:启动进程资源并将其与Process组件关联
StartInfo属性:获取或设置要传递给启动进程的文件名以及启动参数
启动进程的两种方法:
- 先创建Process类的一个实例,并通过StartInfo属性指定要运行的应用程序名称以及传递的参数,然后调用该实例的Start方法启动该进程。
若进程带有图形用户界面:可用ProcessWindowStyle枚举指定启动进程时如何显示窗口。可选的枚举值有:Normal(正常窗口)、Hidden(隐藏窗口)、Minimized(最小化窗口)和Maximized(最大化窗口)
- 直接调用Process类提供的Start静态方法启动进程。
(2)停止进程:
停止进程的两种方法:
CloseMainWindow + Close(释放资源): 有图形界面
Kill + WaitForExit(等待退出): 所有程序
如何选择:
CloseMainWindow | Kill |
---|---|
图像界面的先礼后兵先尝试CloseMainWindow后尝试 Kill | 没有图形用户界面直接用Kill方法 |
异常处理:
若进程正要终止的同时调用Kill方法,可能会引发异常,所以调用时最好使用try/catch语句!
Process类提供的相关方法和属性:
方法/属性 | 解释 |
---|---|
Kill方法和CloseMainWindow方法 | 前者用于强行终止进程,后者只是“请求”终止进程。 |
HasExited属性 | HasExited属性用于判断启动的进程是否已停止运行。 |
WaitForInputIdle方法 | 仅适用于具有用户界面的进程,它可以使Process等待关联进程进入空闲状态。 |
WaitForExit方法 | 设置等待关联进程退出的时间 |
ExitCode属性 | ExitCode属性用于获取关联进程终止时指定的值 |
ExitTime属性 | ExitTime属性用于获取关联进程退出的时间 |
EnableRaisingEvents属性 | EnableRaisingEvents属性用于获取或设置在进程终止时是否应引发Exited事件。 |
(3)获取所有进程信息:
获取进程的方法:
1. 获取所有进程信息:
Process类的GetProcesses静态方法用于创建新的Process数组,并将该数组与本地计算机上的所有进程资源相关联。
举例
① 获取本地计算机的所有进程:
Process[] myProcesses = Process.GetProcesses();
② 获取远程计算机的所有进程:
Process[] myProcesses =Process.GetProcesses (remoteMachineName);//例如:Process[] myProcesses =Process.GetProcesses (\"192.168.0.1\");
2. 获取指定进程信息:
Process的GetProcessById静态方法会自动创建Process对象,并将其与本地计算机上的进程相关联,同时将进程Id传递给该Process对象。
GetProcessesByName静态方法返回一个包含所有关联进程的数组。
举例
① 获取本地计算机相关进程:
Process p = Process.GetProcessesById(5152);
② 获取本地计算机上指定名称的进程:
Process[] myProcesses = Process.GetProcessesByName(\"进程名称\");
③获取远程计算机上指定名称的进程:
Process[] myProcesses = Process.GetProcessesByName(\"远程进程名称\",remoteMachineName);
(1)进程名称不带扩展名。
(2)可以是任何一个可执行文件
Process类的相关属性:
Process类的有关进程信息的属性 | 解释 |
---|---|
MachineName属性 | 获取关联进程正在其上运行的计算机名 |
MainModule属性 | 获取关联进程的主模块 |
Modules属性 | 获取由关联进程加载的模块 |
TotalProcessorTime属性 | 获取进程的总的处理器时间 |
StartTime属性 | 获取关联进程的启动时间 |
WorkingSet64属性 | 为进程分配的物理内存量(字节数) |
- 点赞
- 收藏
- 分享
- 文章举报
Geng_Sir发布了5 篇原创文章 · 获赞 0 · 访问量 69私信关注