标签:
#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和我们之前猜测的不一样,也就不足为奇了。
标签:
原文地址:http://www.cnblogs.com/s742780906/p/4696274.html