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

对fork()的不解

    来源: 互联网  发布时间:2015-12-25

    本文导语:  #include #include main() {   pid_t val;     printf("PID before fork():%dn",(int)getpid());   if (val=fork())     printf("parent PID :%dn",(int)getpid());               else              printf("child pid: %d n",(int)getpid()); } 输出...

#include
#include

main()
{
  pid_t val;
 
  printf("PID before fork():%dn",(int)getpid());

  if (val=fork())
    printf("parent PID :%dn",(int)getpid());
  
           else
             printf("child pid: %d n",(int)getpid());
}
输出结果:
PID before fork():3229
child pid: 3231 
parent PID :3229


不解的问题:
1.为什么if的两条语句都会被执行 ?
2.为什么childpid值为3231,为什么不是3230 ?

|
fork之后有两个进程, 父进程跑的是if的第一个分之, 子进程跑的是if的第2个分之.

为什么childpid值为3231,为什么不是3230?
Linux的进程id是递增的,但linux是多任务的系统,有很多内核线程或者其他进程也参与了调度,
如果在这期间有一个进程被创建而站用了3230, 那么childpid为3231也不足为奇

|
因为fork调用一次却返回两次,在调用它的父进程,它返回一次,返回值是派生子进程的ID,在子进程,它返回一次,返回值为0。所以,两条if语句都被执行了,事实上,两个if语句是在两个进程里面分别执行的。
   2,理由同楼上,由可能该id被其他进程占用了

|
because, fork() copys the parent process as child porcess. so the child and parent are the same before exec(). the difference is that in child fork() returns 0, in parent fork() returns the child id. You can think the fork() as:

1) the main() runs to (val = fork())
2) fork() system call copys the parent process wholely. so the child is the same as parent
3) so the parent and child will seperately run from returning from (val = fork())
4) in child, fork() returns 0.so the if(val=for()) statement is evaluated as false,
5) in parent, fork() returns pid. so the if(val=for()) statement is evaluated as true.

Regards

|
it depends on how you run your program, on the terminal or redirecting output to the file..


http://community.csdn.net/Expert/TopicView3.asp?id=5172585

    
 
 

您可能感兴趣的文章:

  • 关于fork的不解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • fork()函数入门级问题:fork()与进程数
  • 一个fork的问题
  • 新手的问题关于fork?
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • fork() 父子进程执行顺序问题
  • 关于fork创建进程的一个问题
  • exit和fork是什么关系?他们是怎么配合使用的?
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • fork的问题
  • 请教 linux的fork从什么版本开始支持COW?
  • c++ 和 fork


  • 站内导航:


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

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

    浙ICP备11055608号-3