对fork使用的一点收获

原创 2005年01月11日 09:32:00
对于如下程序:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

static int flag;

int
main(void)
{
int i;
flag=5;

for(i=0;i<5;i++){
if(fork()==0){
flag--;
printf("flag=%d/n",flag);
exit(0);
}
}
exit(0);
}
编译,运行结果如下:
#./a.out
#flag=4
flag=4
flag=4
flag=4
flag=4
开始一直认为输出的flag的值应当是4,3,2,1,0。
        实际上fork调用成功后,根据规则父子进程共享部分数据空间,该空间被内核标记为“写时复制”。当你的子进程试图修改flag值时,内核立即复制该页面到新的内存空间。因此两个“flag”并不相同,在子进程中修改flag值不能影响main。
        也就是说fork后子进程修改的变量将是从父进程复制过来的新的子进程自己的变量,不影响父进程中变量的值。
        那如果要用实现子进程中改变父进程的值,就要使用管道,共享内存等进程间通信技术或者使用多线程技术。
        虽然看书曾看过这个问题,但是在实际操作时又不小心在这里犯迷糊了。

2017年总结—颓废的一年

2016年12月,我辞去的我的第一份正式工作,从3月24日入职到12月1日正式离职,在上家公司呆的大半年时间里还算快乐。谢谢大家的照顾!     在上家公司做的项目是我Android入门的第...
  • yelllowme
  • yelllowme
  • 2018年01月05日 13:53
  • 23

Linux环境下编程(一)——进程fork()的使用

先简单介绍一下进程的概念 定义: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 经典定义: 进程是一个执行中的程序的...
  • sshhiixx
  • sshhiixx
  • 2015年07月25日 15:46
  • 2057

面向对象的一点小的收获

学习JAVA已有一月,对于一个新手来讲,面向对象时一个menkan
  • java_cfj
  • java_cfj
  • 2014年08月22日 10:42
  • 63

调试堆的一点小收获

来自:http://blog.csdn.net/chence19871/article/details/6664125 看过《0day安全:软件漏洞分析技术》的童鞋们都知道在内存中的堆分...
  • xrain_zh
  • xrain_zh
  • 2015年05月11日 22:29
  • 280

步进电机的一点收获

步进电机
  • ReCclay
  • ReCclay
  • 2017年07月22日 15:52
  • 154

fork()创建子进程步骤、函数用法及常见考点(内附fork()过程图)

一个现有进程可以调用fork函数创建一个新的进程。 #include《unistd.h> pid_t fork(void);                    返回值:子进程中返回0,父进程...
  • yangcs2009
  • yangcs2009
  • 2014年09月14日 09:44
  • 7731

关于fork函数的使用问题

关于fork函数和进程调度的讨论
  • aotony_1988
  • aotony_1988
  • 2016年04月16日 12:13
  • 406

fork编程注意事项

概念:   对于unix环境中的高级编程而言,完整地了解unix的进程控制是非常重要的。其中必须熟练掌握的只有几个函数:fork、exec族、_exit、wait和waitpid。 总结一下for...
  • daiyudong2020
  • daiyudong2020
  • 2016年02月14日 14:02
  • 822

linux——浅谈fork与vfork的使用与区别

区别:1.fork:子进程拷贝父进程的数据段 vfork:子进程与父进程共享数据段 2.fork:父,子进程的执行次序不确定 vfork:子进程先运行,父进程后运行...
  • xiaowu8858892520
  • xiaowu8858892520
  • 2016年12月11日 19:11
  • 538

git使用之六——github协同工作的Fork+Pull Request

git使用之六——github协同工作的Fork+Pull Request
  • u010331406
  • u010331406
  • 2015年10月14日 18:14
  • 1504
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对fork使用的一点收获
举报原因:
原因补充:

(最多只允许输入30个字)