zoukankan      html  css  js  c++  java
  • 系统编程-进程-vfork使用、浅析

    1. 先贴代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int globvar = 6; /* external variable in initialized data */
    
    int main(void)
    {
        int var;      /* automatic variable on the stack */
        pid_t pid;
    
        var = 88;
        printf("before vfork, pid=%d 
    ", getpid()); /* we don't flush stdio */
    
        if ( (pid = vfork()) < 0 )
        {
            printf("vfork error");
        }
        else if (pid == 0)
        {             
        sleep(1); /* child */
    
        printf("child: pid=%d 
    ", getpid());
            globvar++; /* modify parent's variables */
            var++;
            //exit(0); /* child terminates */
        }else{
    
        printf("Im Parant 
    ");
        }
    
        /* parent continues here */
        printf("pid = %ld, glob = %d, var = %d
    ", (long)getpid(), globvar, var);
        
        printf("1. pid=%d 
    ", getpid()); 
        sleep(3);
        printf("2. pid=%d 
    ", getpid()); 
        printf("3. pid=%d 
    ", getpid()); 
    
        _exit(0);
    }

    2. 

    运行:

    root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork#
    root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork# gcc test1.c -o ab
    root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork# ./ab
    before vfork, pid=13810
    child: pid=13811
    pid = 13811, glob = 7, var = 89
    1. pid=13811
    2. pid=13811
    3. pid=13811
    Im Parant
    pid = 13810, glob = 7, var = 89
    1. pid=13810
    2. pid=13810
    3. pid=13810
    root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork#
    root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork#

    分析:

    即使上述代码处存在sleep(3)这个延时,运行发现子进程一定是先运行的,而且会运行到exit后才轮到父进程执行。

    并且vfork后子进程改变的栈数据和全局数据是会影响到父进程内的。

    小结: 1. vfork后,保证子进程先运行,在子进程调用exit等函数后主进程才会继续运行。

                2. vfork创建的子进程与父进程共享数据段。

    关联博文:

    系统编程-进程-fork深度理解、vfork简介

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    “不裁员”才是公司度过艰难时期的聪明选择
    oracle服务端与客户端字符集不同导致中文乱码解决方案
    [转]ABAP数据库操作系列(5)
    [转]ABAP数据库操作系列(2)
    [转]整理的函数
    [转]ABAP数据库操作系列(6)
    [转]ABAP数据库操作系列(7)
    [转]Authoritycheck
    [转]ABAP Program to Display SAP Icons
    [转]ABAP数据库操作系列(3)
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/14223518.html
Copyright © 2011-2022 走看看