天天看点

vfork函数

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

/* 
    vfork和fork的区别:
        .vfork创建的子进程和父进程共享线性地址空间;fork创建的子进程具有独立的线性地址空间
        .vfork先执行子进程;fork子进程和父进程的执行顺序是随机的
        .vfork创建的子进程中只有在调用exit()或者execve()函数之后,父进程才可能被成功调用
*/

int main(void)
{
    pid_t fpid;

    int count = ;

    fpid = vfork();

    if (fpid == -) {
        perror("MSG");
    }

    else if (fpid > ) {
        printf("parrent: %d\n", getpid());
        count++;
        printf("count: %d\n", count)
    }

    else if (fpid == ) {
        printf("child: %d\n", getpid());
        count++;
        printf("count: %d\n", count);
        exit();
    }

    return ;
}

/*
    .执行结果:
    child: 
    count: 
    parrent: 
    count: 

    .如果子进程没有调用exit(), 执行结果为:
    child: 
    count: 
    parrent: 
    count: 
    重复上面的打印结果
*/
           

继续阅读