您的位置:首页 > 其它

diffork.c

2015-08-02 17:16 393 查看
#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和我们之前猜测的不一样,也就不足为奇了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: