您的位置:首页 > 其它

4-进程

2016-03-09 20:30 211 查看
1. 可以用CreateProcess函数创建一个进程

2. 终止进程的运行:

若要终止进程的运行,可以使用下面四种方法:

1). 主线程的进入点函数返回(最好使用这个方法) 。

始终都应该这样来设计应用程序,即只有当主线程的进入点函数返回时,它的进程才终止运行。这是保证所有线程资源能够得到正确清除的唯一办法。让主线程的进入点函数返回,可以确保下列操作的实现:

a. 该线程创建的任何C + +对象将能使用它们的析构函数正确地撤消。

b.  操作系统将能正确地释放该线程的堆栈使用的内存。

c. 系统将进程的退出代码(在进程的内核对象中维护)设置为进入点函数的返回值。

d. 系统将进程内核对象的返回值递减1。

2). 进程中的一个线程调用E x i t P r o c e s s函数(应该避免使用这种方法) 。

3). 另一个进程中的线程调用Te r m i n a t e P r o c e s s函数(应该避免使用这种方法) 。

该函数与E x i t P r o c e s s有一个很大的差别,那就是任何线程都可以调用 Te r m i n a t e P r o c e s s来终止另一个进程或它自己的进程的运行。

4). 进程中的所有线程自行终止运行(这种情况几乎从未发生) 。

3. 如果进程确实没有机会执行自己的清除操作,但是操作系统可以在进程之后进行全面的清除,使得所有操作系统资源都不会保留下来。这意味着进程使用的所有内存均被释放,所有打开的文件全部关闭,所有内核对象的使用计数均被递减,同时所有的用户对象和 G D I对象均被撤消。一旦进程终止运行(无论采用何种方法) ,系统将确保该进程不会将它的任何部分遗留下来。绝对没有办法知道该进程是否曾经运行过。进程一旦终止运行,它绝对不会留下任何蛛丝马迹。希望这是很清楚的。

我觉得这段话可以理解为:当你有new(malloc)出新的对象,但是却没有delete(free)掉,进程“意外”的终止后,操作系统也会保证回收此进程的所有资源。不会造成所谓的内存泄漏。而实际上,内存泄漏这一概念只在进程的运行期才存在、有意义。

4. 当进程终止运行时,下列操作将启动运行:

1) . 进程中剩余的所有线程全部终止运行。

2) . 进程指定的所有用户对象和G D I对象均被释放,所有内核对象均被关闭(如果没有其他

进程打开它们的句柄,那么这些内核对象将被撤消。但是,如果其他进程打开了它们的句柄,

内核对象将不会撤消) 。

3) . 进程的退出代码将从S T I L L _ A C T I V E改为传递给E x i t P r o c e s s或Te r m i n a t e P r o c e s s的代码。

4) . 进程内核对象的状态变成收到通知的状态(关于传送通知的详细说明,参见第 9章) 。系

统中的其他线程可以挂起,直到进程终止运行。

5) . 进程内核对象的使用计数递减1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: