fork 与 vfork

来源:互联网 发布:手机监测软件流量 编辑:程序博客网 时间:2024/05/22 02:17

1、函数原型

      #include <unistd.h>

       pid_t fork(void);

       pid_t vfork(void);

2、用法介绍

      fork()把当前进程克隆一份,克隆后的新旧进程只有进程id不同。新进程称为旧进程的子进程。两份进程都从克隆完成的那个地方继续运行!两份进程独立运行,谁先谁后没有规定。fork克隆是全部克隆,包括所有的函数、变量、缓冲区、打开的文件等整个进程空间中的一切。其中子进程return返回的是0,父进程return返回的是子进程的id(一定不是0),失败返回-1。

         vfork跟fork类似,但存在如下的差别 

        1. fork():子进程拷贝父进程的数据段,代码段。vfork():子进程与父进程共享数据段.

        2. fork():父子进程的执行次序不确定.

            vfork():保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec

            或exit之后父进程才可能被调度运行。

        3. vfork()保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在

            调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

        4. 当需要改变共享数据段中变量的值,则拷贝父进程。


 

原创粉丝点击