进程与进程间通信

进程与进程间通信

多线程开发扫盲系列第一编:进程与进程间通信

1. 操作系统的进程与线程管理   

2. 进程的启动和终止   

3. 进程通信   

1.进程与线程管理

进程(process)是一个具有独立功能的程序在一个数据集合上的一次动态执行过程。这个定义太理论化了,用一句通俗的话取代它:进程可以简单理解为一个正在运行的程序。
程序与进程的区别可以用图形像地表达出来。


    Window设计了两种代码运行环境,用户模式(User Mode)和核心模式(kernel Mode),普通的应用程序运行于用户模式中,而操作系统的关键代码(比如负责分配与回收内存、创建和销毁进程等功能的代码)运行于核心模式下。 在windows中,”系统调用”主要指win32API中的特定函数,所以,windows应用程序通过调用win32API函数来实现从”用户模式”到”核心模式”的转换
   

    句柄与系统核心对像
    位于操作系统内核中,仅允许运行于”核心模式”下的代码访问的数据被称为”核心对像”,操作系统在运行时,会在系统核心不断地创建和销毁”核心对像”,为了便于跟踪和访问这些对像,操作系统为这些对像分配了标识,这是一个32位的整数,被称为”句柄”。许多win32 API函数通过句柄来定位所要访问的系统核心对像。在.NET托管环境中,.NET应用程序对”普通对像”和”核心对像”不加区分,使用New关键字就可以创建任何一种类型的对像,而对像的销毁工作邮CLR负责。
   

    Windows操作系统使用线程作为CPU调度的基本单位,一个进程可以划分多个线程,也可以只有一个线程。它拥有一个线程标识(ThreadID),一组CPU寄存器,两个堆栈和一个专有的线程局部存储区(Thread Local Storage,TLS)。属于同一个进程的线程共享进程所拥有的资源。
进程是系统分配各种资源(比如内存)的单位,而线程则是操作系统分配CPU(即处理机调度)的基本单位。

2.进程的启动与终止

    .NET应用程序控制进程的核心是Process类,Process类继承自Component类,通常又称为Process组件。Process组件代表一个托管进程,底层封装的是操作系统的本地进程。另一个重要的类是ProcessStartInfo类,这个类封装了进程启动时的各种控制参数。

如下继承结构图


使用Process.Start方法启动进程
Process.Start(“IExplore.exe”)
Process.Start(“IExplore.exe”,”www.baidu.com”)
有时候我们希望向进程传送一些控制信息,比如此进程打开一个网页时最小化,可以这么来做
ProcessStartInfo info = new ProcessStartInfo("IExplore.exe");
info.WindowStyle=ProcessWindowStyle.Minimized;  //自动最小化
info.Arguments="www.sina.cn";  //自动访问新浪网
Process.Start(info);  //启动进程   


通过调用CloseMainWindow方法发出的结束进程运行的请求不会强制应用程序立即退出,它相当于用户直接点击主窗口上的关闭按钮。应用程序可以在退出前请求用户确认,也可以拒绝退出。

Kill方法强制关闭一个进程,与CloseMainWindow方法不同,Kill方法实际上是请求操作系统直接结束进程,它不给要关闭的进程保存数据的机会,因此除非要保存的进程没有任何数据需保存,否则不要采用Kill方法直接结束某个进程。

 
 
分类: c#
原文地址:https://www.cnblogs.com/Leo_wl/p/3273554.html