重明鸟软件知识平台
@C/C++多进程编程(3)
vfork() 函数和 fork() 函数都是在已有的进程中创建一个新的进程,但它们创建的子进程是有区别的。

(1) fork(): 父子进程的执行次序不确定。
vfork():保证子进程先运行,在它调用 exec(进程替换) 或 exit(退出进程)之后父进程才可能被调度运行。
(2) fork(): 子进程拷贝父进程的地址空间,子进程是父进程的一个复制品。
vfork():子进程共享父进程的地址空间(准确来说,在调用 exec(进程替换) 或 exit(退出进程) 之前与父进程数据是共享的)
vfork例子
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
  
int main(int argc, char *argv[])  
{  
    pid_t pid;  
      
    pid = vfork();  // 创建进程  
    if(pid < 0){ // 出错  
        perror("vfork");  
    }  
      
    if(0 == pid){ // 子进程  
      
        sleep(3); // 延时 3 秒  
        printf("i am son\n");  
          
        _exit(0); // 退出子进程,必须  
    }else if(pid > 0){ // 父进程  
          
        printf("i am father\n");  
          
    }  
      
    return 0;  
}

/*
输出:
i am son
i am father
*/  
共享内存例子:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
  
int a = 10;  
  
int main(int argc, char *argv[])  
{  
    pid_t pid;  
      
    int b = 20;  
      
    pid = vfork();  // 创建进程  
    if(pid < 0){ // 出错  
        perror("vfork");  
    }  
      
    if(0 == pid){ // 子进程  
      
        a = 100, b = 200;  
        printf("son: a = %d, b = %d\n", a, b);  
          
        _exit(0); // 退出子进程,必须  
    }else if(pid > 0){ // 父进程  
          
        printf("father: a = %d, b = %d\n", a, b);  
          
    }  
      
    return 0;  
}  

/*
输出结果:
son:a=100,b=200
father:a=100,b=200
*/
@站内查找
@栏目文章
【基础教程】Python守护进程创建
【基础教程】PyGame(13):三维环境设置
【基础教程】C/C++指针函数和回调函数
【基础教程】C/C++多进程编程(3)
【基础教程】C/C++多进程编程(2)
【基础教程】C/C++多进程编程(1)
【基础教程】C/C++多线程编程(2)
【基础教程】C/C++多线程编程(1)
【基础教程】C/C++动态库编程
【基础教程】C/C++静态库编程
【基础教程】photoshop图片混合公式
【基础教程】PyGame(12):旋转和缩放
【基础教程】PyGame(11):Surface操作
【基础教程】网络编程:Epoll(2)
【基础教程】网络编程:Epoll(1)
【基础教程】网络编程:IOCP(3)
【基础教程】网络编程:IOCP(2)
【基础教程】网络编程:IOCP(1)
【基础教程】网络编程:UDP
【基础教程】网络编程:TCP
【基础教程】Ubuntu安装Hadoop(4)
【基础教程】Ubuntu安装Hadoop(3)
【基础教程】Ubuntu安装Hadoop(2)
【基础教程】Ubuntu安装Hadoop(1)
【基础教程】Hadoop技术原理
【基础教程】Hadoop基本命令
【基础教程】Hadoop是什么东西
【基础教程】排序算法介绍
【基础教程】PyGame(10):声音控制
【基础教程】PyGame(9):鼠标事件(2)
【基础教程】PyGame(8):鼠标事件(1)
【基础教程】PyGame(7):键盘事件(2)
【基础教程】PyGame(6):键盘事件(1)
【基础教程】PyGame(5):显示图片
【基础教程】PyGame(4):显示文字
【基础教程】PyGame(3):图元绘制
【基础教程】PyGame(2):游戏框架
【基础教程】PyGame(1):开发环境搭建
【基础教程】Python(10):类定义
【基础教程】Python(9):自定义模块
【基础教程】Python(8):输入输出控制
【基础教程】Python(7):函数定义
【基础教程】Python(6):中断语句
【基础教程】Python(5):判断语句
【基础教程】Python(4):循环语句
【基础教程】Python(3):变量与运算符
【基础教程】Python(2):Hello
【基础教程】Python(1):介绍与安装
Copyright @ 2011-2018 by szc  桂ICP备11003301号-1  桂公网安备45040302000027号  Email:szcsoft@qq.com