AI智能
改变未来

C#学习笔记——进程篇


C#进程

进程和线程是分不开的,本文主要描述进程。

1. 简单介绍:

进程:
  1. 进程是操作系统级别的一个基本概念,可以将其简单地理解为“正在运行的程序”,例:
    1.qq程序 VS 正在运行的qq进程;
    2.火车 VS 正在驶过的一辆火车;
  2. 进程是资源调度和分配的基本单位。
  3. 进程之间是相互独立的。
  4. 在操作系统级别的管理中,利用Process类可启动、停止本机或远程进程。

进程和线程的关系:

一个车间相当于一个进程,车间内工人相当于线程

2. 进程管理(Process类)

1、Process类位于System.Diagnostics命名空间下。
2、 对本机(本地计算机)的操作:
  1. 可以启动、终止某个进程;
  2. 可以查看进程相关信息,如CPU利用率等;
  3. 可以查看进程工作状态;
3、 对远程计算机的操作:
  1. 可以查看远程计算机相关信息;
  2. 无法直接启动、终止远程计算机;
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属性:获取或设置要传递给启动进程的文件名以及启动参数

启动进程的两种方法:

  1. 先创建Process类的一个实例,并通过StartInfo属性指定要运行的应用程序名称以及传递的参数,然后调用该实例的Start方法启动该进程。

若进程带有图形用户界面:可用ProcessWindowStyle枚举指定启动进程时如何显示窗口。可选的枚举值有:Normal(正常窗口)、Hidden(隐藏窗口)、Minimized(最小化窗口)和Maximized(最大化窗口)

  1. 直接调用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私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#学习笔记——进程篇