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

diffork.c

时间:2015-08-02 18:07:15      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

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

int globvar = 5;

int main(void)
{
    pid_t pid;
    int var = 1, i;

    printf("fork is different with vfork\n");
    
      pid = fork();
     // pid = vfork();
    switch(pid){
        case 0:
                i = 3;
        while(i-- > 0){
            printf("Child process is running\n");
            globvar++;
            var++;
            sleep(1);
        }
        printf("child‘s globvar = %d, var = %d\n", globvar, var);
        break;
        case -1:
                printf("error\n");
                exit(0);
        default:
                i = 5;
        while(i-- > 0){
            printf("parent process is running\n");
            globvar++;
            var++;
            sleep(1);
        }
        printf("parent‘s globvar = %d, var = %d\n", globvar, var);
        exit(0);
    }
}

前几天照树= =上写比较vfuck与fuck的程序时,代码如上,当调用的是fuck时,结果如下:

技术分享

这在意料之中。技术分享

但当调用vfuck时,结果是这个样子的= =:

技术分享

WTF!技术分享这什么鬼= =。

开门见山吧。

  vfork调用,子进程先行一步,果然老子都很疼儿子。子进程执行完毕,跳出switch到最后一行。

程序最后虽然没有return || exit之类的语句,但默认使用return 0。学长是这样讲的。return 0执行后

相当与执行exit,所以内存中的栈被清除,也就是说局部变量是一个随机值。当父进程运行时,var和我们之前猜测的不一样,也就不足为奇了。技术分享

 

diffork.c

标签:

原文地址:http://www.cnblogs.com/s742780906/p/4696274.html

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