Unix Network Programming(14)---fork 和 exec 函数

来源:互联网 发布:怎么维护代理商 知乎 编辑:程序博客网 时间:2024/05/29 18:10

fork 函数是Unix中派生新进程的唯一方法。

#include <unistd.h>pid_t fork(void);   /*返回:在子进程中为0,在父进程中为子进程ID,若出错则为-1*/

fork函数调用一次,返回两次。调用进程(父进程)返回值是新派生进程(子进程)的进程ID号;在子进程中又返回一次,返回值为0.

key point:

fork在子进程返回0而不是父进程的进程ID的原因在于:任何子进程只有一个父进程,而且子进程总是可以通过调用getppid取得父进程的ID。相反,父进程可以有许多子进程,而且无法获取各个子进程的进程ID。如果父进程想要跟踪所有子进程的进程ID,那么它必须记录每次调用fork的返回值。

fork函数两个典型用法:

  1. 一个进程创建一个自身的副本,这样每个副本都可以在另一个副本执行其他任务的同时处理各自的某个操作。这是网络服务器的典型用法。
  2. 一个进程想要执行另一个程序。既然创建新进程的唯一方法是调用fork,该进程于是首先调用fork创建一个自身的副本,然后其中一个副本(通常是子进程)调用exec把自身替换成新的程序。这是诸如shell之类程序的典型用法。

exec函数

存放在硬盘上的可执行程序文件能够被Unix执行的唯一方法是:由一个现有进程调用6个exec函数的某一个。exec把当前进程映像替换成新的程序文件,而且程序通常从main函数开始执行。进程ID并不改变。调用exec的进程为调用进程,称新执行的程序为新程序。
Page91

0 0