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

求解exit(0)和return 0 的区别

    来源: 互联网  发布时间:2017-04-07

    本文导语:  这是代码 很简单,但输出却不同,使用return 0会产生段错误。而exit(0)执行正常,我就是想知道为什么??       1 #include       2 #include       3 #include       4 #include       5 #include       6 in...

这是代码 很简单,但输出却不同,使用return 0会产生段错误。而exit(0)执行正常,我就是想知道为什么??


      1 #include
      2 #include
      3 #include
      4 #include
      5 #include
      6 int glob=6;
      7 //int var;
      8 //int temp=1;
      9 int main()
     10 {
     11         int var;
     12         pid_t pid ;
     13         var =88;
     14         int temp=1;
     15 
     16         printf("in beginning: tglob=%dtvar=%dttemp=%dn",glob,var,tem        p);
     17 
     18         pid=vfork();
     19         if(pid0)
     37         {
     38                 printf("i'm parent:glob=%dtvar=%dttemp=%dn",glob,var,        temp);
     39                 return 0;
     40         }
     41 
     42         //return 0;
     43 }

注意;红色部分
exit(0)是强制是程序终止,而return 0是返回给函数而已,但如果在line42 返回的话,也相当于执行完进程。所以我很困惑!
希望给位大神给我一个满意的答案! 小弟鸟中之鸟??

|
这个跟vfork()有关。

看联机帮助
The child shares all memory with its parent, including the stack, until execve() is issued by the child.  The child must not  return  from  the  current function or call exit(), but may call _exit().

|
用return 0返回的终极原因是:父进程的栈被破坏了。

1. vfork比较特殊,它创建的子进程和父进程共享一切,因此栈也是共享的。

2. 当子进程调用了return 0返回后,会弹出栈里面的返回地址(就是当初压入main函数的那条指令的下一条指令的地址),然后在调用_exit(crt1.o里面的)退出。

3. 在第2步中由于共享栈被破坏了(返回地址不见了),因此父进程再次调用return 0的时候就会将错误的返回地址弹出,由此发生了段错误!

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












  • 相关文章推荐
  • 求解 求解 求解
  • Linux Shell编程从初学到精通 第四章课后习题2 求解
  • 有限元求解器 GetDP
  • 偏微分方程求解工具箱 DUNE
  • linux命令求解释....
  • 偏微分方程求解框架 Overture
  • 100分求解!!!!!
  • 编译内核时候出现的问题,求解
  • makefile求解
  • 求解ucos ii的一句代码
  • 求助linux下mysql 求解!
  • 求解啊,centos下 shutdown -h now 无效??
  • 求解windows下硬盘安装linux如何用linux引导
  • 关于linux shell的一个不明白的地方。求解
  • solaris安装不上,求解.............
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • ubuntu12.04求解
  • 100分求解如何查看内存最高使用值!!
  • 高分求解---如何在DOS下查杀欢乐时光病毒?用哪种杀毒软件?Windows98没法进入了!
  • 求解struct的大小


  • 站内导航:


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

    ©2012-2021,