根据posix约定和linux的实现,linux中子进程退出的时候要发送信号给父进程,这其实只是一种约定,没有什么大不了的,但是这个特性给编程的人带来了一种方便,使得可是得知子进程何时退出,那么子进程在不用心跳检测的前提下如何得知父进程何时退出的呢? 
子进程在退出的时候发送信号给父进程并不是一种什么机制,只是歪了更加方便的管理操作系统进程而商量得到的一种约定而已,但是这种约定却是可以被利用的,从而父进程就没有必要在来什么心跳来检测子进程是否已经退出。在操作系统内核当中,进程是被作为一个实体来管理的,进程管理其实是操作系统的一部分,进程 要被管理就要一些数据结构,这些数据结构只在进程存在没有退出的时候有效,进程一旦退出,这些数据结构就要被回收,那么谁来回收这些数据结构就成了一个问题,让退出的进程自己来回收吗?这看来不是什么好主意,毕竟退出行为是自己的行为,而回收行为却不是自己的职责,因此为了自洽,谁分配的谁回收显然是一个 好主意,进程实际上没有回收自己的义务,它拥有的唯一义务就是运行自己,结婚,生子,和动物不同的是,它还要为孩子收尸(人类当然也有白发送黑发一说,呵呵),进程是什么,进程是一个执行绪,除此之外没有别的内涵了,进程在运行的时候并不知道太多关于自己被操作系统管理的进程结构的太多信息,它所知道的仅 仅是自己该如何运行,因此回收进程数据结构的任务就不应该来人进程本身来承担,那么为何不让操作系统内核来承担呢?要知道操作系统内核只是提供了一种机制来管理进程,管理并维持进程的状态机,比如运行,睡眠,挂起等等,它要管理进程的话,进程数据结构必须首先存在,要不它管理个鸟啊,创建进程是用户的事 情,因此何时为进程分配数据结构以及分配什么样的数据结构就是一种策略,再重申一遍,内核仅仅提供一种机制,该机制用来管理进程,而进程的行为多种多样,创建进程变成了用户实现的一种策略,用户进程依据用户提供的信息创建了另一个进程,然后操作系统就开始管理这个新进程,只有创建这个新进程的进程知道这个 进程的创建信息,那么理所当然创建新进程的进程有义务在这个新进程退出后回收这个由 

是posix就有了一种约定,就是现在 linux实现的这样,进程退出的时候向父进程发信号,由父进程来负责回收之。 


本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273419