• man(2) V



    vfork(2) 

    #include <sys/types.h>
    #include <unistd.h>

    pid_t vfork(void);

    功能:创建子进程并阻塞父进

    ----------------------------------------------------

    1 #include<sys/types.h>
    2 #include<unistd.h>
    3 #include<stdio.h>
    4 int main()
    5 {
    6 pid_t pid;
    7 int cnt = 0;
    8 pid = fork();
    9 if(pid<0)
    10 printf("error in fork! ");
    11 else if(pid == 0)
    12 {
    13 cnt++;
    14 printf("cnt=%d ",cnt);
    15 printf("I am the child process,ID is %d ",getpid());
    16 }
    17 else
    18 {
    19 cnt++;
    20 printf("cnt=%d ",cnt);
    21 printf("I am the parent process,ID is %d ",getpid());
    22 }
    23 return 0;
    24 }

    运行结果:

    cnt = 1

    I am the child process,ID is 14735

    cnt = 1

    I am the parent process,ID is 14736

    证明子进程拷贝父进程的数据段,代码段

    int main()
    {

    pid_t pid;
    int cnt = 0;
    pid = vfork();
    if(pid<0)
    printf("error in fork! ");
    else if(pid == 0)
    {
    cnt++;
    printf("cnt=%d ",cnt);
    printf("I am the child process,ID is %d ",getpid());
    // _exit(0);//注释这个就出现段错误
    }
    else
    {
    cnt++;
    printf("cnt=%d ",cnt);
    printf("I am the parent process,ID is %d ",getpid());
    }
    return 0;

    }

    1注释掉exit就段错误

    vfork 保证子进程先运行,在她调用exec 或exit 之 
    后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动 
    作,则会导致死锁。 

    2不注释

    cnt = 2  子进程与父进程共享数据段.man

    ------------------------------------------------------------------------

    fork与vfork的区别

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

    2. fork():父子进程的执行次序不确定.vfork():保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit之后父进程才可能被调度运行。

    3. vfork()保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

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

    https://www.cnblogs.com/lovemdx/p/3308057.html

    ----------------------------------------

    vhangup(2)

    vm86(2) vm86old(2) vmsplice(2) vserver(2)

  • 相关阅读:
    CF1375E Solution
    牛客暑期营2K Solution
    牛客暑期营1F Solution
    redux的使用
    react-routerV6.0的使用
    react配置emotion
    react项目中配置antd
    使用npx创建react+typescript项目
    【5】Redis从入门到放弃---秒杀案例(Redis的事务+锁机制+lua脚本)
    【四】Redis从入门到放弃---RedisTemplate操作Redis
  • 原文地址:https://www.cnblogs.com/xpylovely/p/11018054.html
Copyright © 2020-2023  润新知