fork和vfork的区别
参见百度百科API说明: fork 头文件: # include <unistd.h> # include <sys/types.h> 函数原型: pid_t fork ( void ); (pid_t 是一个 宏定义 ,其实质是int 被定义在# include < sys/types.h >中) 返回值: 若成功调用一次则返回两个值,子进程返回0, 父进程 返回子进程ID;否则,出错返回-1 函数说明: 一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而 父进程 中返回子进程ID。 子进程是 父进程 的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述 存储空间 的“副本”,这意味着父子进程间不共享这些存储空间。 UNIX将复制 父进程 的 地址空间 内容给子进程,因此,子进程有了独立的地址空间。在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。 为什么fork会返回两次? 由于在复制时复制了 父进程 的 堆栈段 ,所以两个进程都停留在fork函数中,等待返回。因此fork函数会返回两次,一次是在 父进程