当前位置:  技术问答>linux和unix

fork的共享问题

    来源: 互联网  发布时间:2016-10-07

    本文导语:  #include   #include   #include   #include   #include   #include   main()  {  pid_t pid;  int rv;  switch(pid=fork()) {  case -1:  perror("fork"); /* something went wrong */  exit(1); /* parent exits */  case 0:  printf(" CHILD: This is the child proc...





#include  
#include  
#include  
#include  
#include  
#include  

main() 

pid_t pid; 
int rv; 

switch(pid=fork()) { 
case -1: 
perror("fork"); /* something went wrong */ 
exit(1); /* parent exits */ 

case 0: 
printf(" CHILD: This is the child process!n"); 
printf(" CHILD: My PID is %dn", getpid()); 
printf(" CHILD: My parent's PID is %dn", getppid()); 
printf(" CHILD: Enter my exit status (make it small): "); 
scanf(" %d", &rv); 
printf(" CHILD: I'm outta here!n"); 
exit(rv); 

default: 
printf("PARENT: This is the parent process!n"); 
printf("PARENT: My PID is %dn", getpid()); 
printf("PARENT: My child's PID is %dn", pid); 
printf("PARENT: I'm now waiting for my child to exit()...n"); 
wait(&rv); 
printf("PARENT: My child's exit status is: %dn", WEXITSTATUS(rv)); 
printf("PARENT: I'm outta here!n"); 

}



这段代码子进程和父进程共享了一个rv么??不是说子进程对父进程进行完全的拷贝了么??不太明白。那应该有两个rv吧??

|
没有共享rv.fork函数创建子进程结束后,如果立即终止两个进程,就会看到子进程和父进程有相同的用户栈,相同的本地变量值,相同的堆,相同的全局变量值.然而父进程和子进程是独立的进程,他们每个都有自己的私有地址空间,一个进程对局部变量的修改不会影响到另一个进程。

|
操作系统好像利用了一个“copy on write”的机制,优化性能..
应该开发中无需关心具体细节,就认为在两个进程中他们是不同的变量,互不影响

|
我的理解就是子进程拥有跟父进程“完全相同”的地址空间,包括全局变量和局部变量(堆栈),这些段之间不是共享的,而是子进程从父进程复制了一份,但是text段可能是共享的。因为各自独立,所以全局变量和局部变量均互不影响。你的程序子进程得到了一个rv值,然后父进程用系统调用wait得到了子进程的退出代码,赋给父进程的rv。我的理解,可能不妥。

|
测试代码:

      1 #include
      2 #include
      3 #include
      4 
      5 int main()
      6 {
      7     int i=4;
      8     pid_t pid;
      9     pid=fork();
     10     if(pid

    
 
 

您可能感兴趣的文章:

  • 各位前辈,当代码执行一个系统调用fork()后,为什么如果共享页设置了写时拷贝位,在父进程之前调度子进程将具有优越性?内核如何能使子进
  • linux内核高手进!关于调用__fork()时0号进程的子进程才能与父进程共享PID的困惑
  • 简直崩溃,有个家伙跟我将fork()函数父子进程共享全局变量!是么?
  • 求助,fork函数建立子进程后,如何让子进程和父进程共享一个变量
  • fork 创建进程,共享内存,文件描述符问题
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 一个fork的问题
  • 新手的问题关于fork?
  • fork() 父子进程执行顺序问题
  • fork()函数入门级问题:fork()与进程数
  • fork的问题
  • 请教一个关于fork的问题。
  • minGW编译带fork函数的问题?
  • 一个简单的fork问题(那个高手来帮忙呀)
  • 关于fork创建进程的一个问题
  • fork与socket问题
  • fork()函数入门级问题:fork()与进程数 iis7站长之家
  • 问个关于fork的小问题
  • fork问题
  • fork()复制进程的问题2
  • fork()问题
  • linuxC中的fork问题,请教大侠帮忙解答
  • 一个简单的fork()问题,求解···在线等
  • fork 带来的问题!
  • fork()复制进程的问题。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • exit和fork是什么关系?他们是怎么配合使用的?
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • 请教 linux的fork从什么版本开始支持COW?
  • c++ 和 fork
  • "fork(2)" 中这个2表示什么意思
  • fork函数的源代码在哪呢
  • 关于fork函数
  • fork函数的理解。。
  • linux的fork()函数
  • 创建一个子进程,什么时候该用clone()而不是fork()?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3