在计算机科学中,父进程是指已经创建了一个或多个子进程的进程[1]。 UNIX
在UNIX操作系统中,除了进程0(即PID=0的交换进程,Swapper Process)之外的所有进程都是通过系统调用fork创建的。[2]在这 个过程中,调用fork创建新进程的进程被称为父进程,而它创建出来的进程则称为子进程。因此,除了进程0外,每个进程都有且仅有一个父进程,但一个进程可能拥有多个子进程。操作系统内核使用进程标识符(Process Identifier,即PID)来唯一标识每个进程。进程0是系统启动时创建的一个特殊进程,在其调用fork创建出一个子进程(即PID=1的进程1,又称init)之后,进程0转变为交换进程(有时也称为空闲进程)。而进程1(init进程)成为了系统中所有其他进程的祖先。
进程生命周期
当一个子进程结束运行时,它的退出状态(返回值)会报告给操作系统,系统随后向父进程发送SIGCHLD信号,通知子进程已被结束。此时,子进程的进程控制块(PCB)仍然保留在内存中。通常情况下,父进程接收到SIGCHLD信号后,会使用wait系统调用来获取子进程的退出状态,接着内核便可以从内存中释放已完成的子进程的PCB。如果父进程未执行此操作,则子进程的PCB将继续保留在内存中,形成所谓的僵尸进程。孤儿进程指的是在其父进程结束后继续运行的子进程。在类UNIX系统中,这些孤儿进程通常会被init进程“收养”,从而成为init的子进程。为了避免产生僵尸进程,实践中常采用的方法包括: