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和我们之前猜测的不一样,也就不足为奇了。
相关文章推荐
- 一个简单的模板引(han)擎(shu)
- 阿里2013双十一备战中的技术突破
- window删除损坏无法打开的文件
- 多校4-Walk Out
- AVL 树的插入和删除
- 奈氏准则和香农公式
- OGRE-降服巨兽
- 多校4-Walk Out 分类: 比赛 2015-08-02 17:15 21人阅读 评论(0) 收藏
- MySQL查询优化之COUNT()
- linux中使用LVM动态扩容
- iOS 导航连续退出2个页面
- 常见端口表汇总
- 什么是JAVABEAN?
- c++ enum类型常量
- machine learning in coding(python):根据关键字合并多个表(构建组合feature)
- 字符子串
- 数组的创建和使用1
- zoj 3203 Light Bulb
- NumberPicker设置宽度,设置文字颜色
- 模拟退火算法