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

fork函数的问题

    来源: 互联网  发布时间:2015-04-11

    本文导语:  程序如下 #include #include #include #define STDOUT_FILENO 1 int val1=6; char *buffer="an output to standard output n"; int main(void) {      int val2;      pid_t pid;      if(write(STDOUTj_FILENO,buffer,strlen(buffer))!=strlen(buffer))      {    ...

程序如下
#include
#include
#include
#define STDOUT_FILENO 1
int val1=6;
char *buffer="an output to standard output n";
int main(void)
{
     int val2;
     pid_t pid;
     if(write(STDOUTj_FILENO,buffer,strlen(buffer))!=strlen(buffer))
     {
           printf("errorn");
           abort();
      }
      printf("before forkn");
      if((pid=fork(),0)
      {
          //出错处理。
       }
       else if(pid==0)
       {
             val1++;
             val2++;
             printf("child proc: pid=%d,val1= %d,val2=%d n",getpid(),val1,val2);
         }
         else
         {
               sleep(2); 
               printf("Parent proc: pid=%d,val1= %d,val2=%d n",getpid(),val1,val2);     
          }
          return 0;
}


程序执行的结果是这样的
an output to standard outpur
before fork
child proc: pid=2494,val1=7,val2=2
parent proc pid=2493,val1=6,val2=1

我觉的非常奇怪(、刚学LINUX)程序中else if(pid==0)是个判断,就是如果执行了
child proc: pid=2494,val1=7,val2=2
就不应该还有parent proc pid=2493,val1=6,val2=1啊!
两个怎么可能都执行到呢??
用gdb调试了一下。发现只是执行了parent proc pid=2493,val1=6,val2=1
哪为大哥能够解释一下。这个结果是怎么产生的。
产生子进程只用了FORK()???
不象WINDOSWcreateprocess有N多个参数啊!
怎么一回事呢?



|
fork之后就有了两个独立的进程:parent和child,两个进程从fork处分道扬镳,parent的fork返回子进程的pid(当然>0),子进程的fork返回0。你看到的结果是两个进程输出的。

|
Linux下的fork是一次调用,两次返回阿,因为多了一个进程么
父子进程都是从fork()返回的,所以才有上边的情况。

    
 
 

您可能感兴趣的文章:

  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 如何理解fork函数返回2次啊?
  • fork函数的源代码在哪呢
  • linux的fork()函数
  • minGW编译带fork函数的问题?
  • Linux fork() 函数
  • 关于fork()函数
  • fork函数的理解。。
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • 关于fork函数
  • fork函数详解?
  • fork函数的处理流程
  • 执行一个main函数程序时,unix操作系统调用什么创建进程?fork?newproc?
  • Linux下关于fork()的函数
  • 谁有unix下c的编程接口资料,如fork函数和killppid的说明
  • Linux fork函数的系统调用实现过程是什么呢?
  • linux fork 函数问题
  • 费解呀,函数fork()的疑惑?
  • 怎么理解fork()函数返回两次值?
  • linux fork()函数的疑惑
  • 一个fork的问题
  • 新手的问题关于fork?
  • fork() 父子进程执行顺序问题
  • fork的问题
  • 请教一个关于fork的问题。
  • 一个简单的fork问题(那个高手来帮忙呀)
  • 关于fork创建进程的一个问题
  • fork与socket问题
  • 关于fork()的一个问题!?
  • 问个关于fork的小问题
  • fork问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • exit和fork是什么关系?他们是怎么配合使用的?
  • 请教 linux的fork从什么版本开始支持COW?
  • c++ 和 fork
  • "fork(2)" 中这个2表示什么意思
  • 创建一个子进程,什么时候该用clone()而不是fork()?
  • fork()的疑问
  • 我对 fork() 意见相当大大
  • 请教,关于fork的用法?
  • fork getpid 返回值
  • fork之后的输出 iis7站长之家
  • 关于fork(2)


  • 站内导航:


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

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

    浙ICP备11055608号-3