码迷,mamicode.com
首页 > 其他好文 > 详细

[学习笔记]Vfork深入理解

时间:2015-04-15 16:22:33      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
#include<errno.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

// 演示 vfork
// vfork共享父进程的数据段
// vfork函数必须和execle这类函数在一起或者exit
// 不建议使用vfork函数

//execve一个应用把另一个应用拉起来---> vfork的主要用途

int main(void)
{
    
    pid_t pid;
    
    //int num;
    printf("before pid : %d\n", getpid());


    pid = vfork();

    if (-1 == pid)
    {
        perror("fork err");
        return 0;
    }
    if (pid > 0)
    {
        printf("parent pid : %d\n", getpid());
    }
    if (0 == pid)
    {
        printf("child pid : %d\n", getpid());
        
        //return 0;  vfork下不能用return
        
        // hello的代码段/数据段/内存控制块/堆栈段完全覆盖子进程(子进程PID不被覆盖)
        execve("./hello", NULL, NULL);
        printf("execve没有执行成功\n");
        exit(0);

    }
    
    return 0;
}

/*
---------------------------------------
运行结果:
before pid : 6985
child pid : 6986
hellowodfs
parent pid : 6985
---------------------------------------
*/

 

[学习笔记]Vfork深入理解

标签:

原文地址:http://www.cnblogs.com/shichuan/p/4428641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!