diffork.c

#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和我们之前猜测的不一样,也就不足为奇了。

时间: 2024-07-29 20:11:34

diffork.c的相关文章