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

main函数中exit(0)和return(0)的区别。(linux下c编程)

    来源: 互联网  发布时间:2016-12-30

    本文导语:  #include"stdio.h" #include"errno.h" #include"unistd.h" #include"stdlib.h" int main(void) {     pid_t pid;     int count=0;     if((pid=vfork())==-1)       {          printf("vfork error:%sn",strerror(errno));          exit(1);       }   ...

#include"stdio.h"
#include"errno.h"
#include"unistd.h"
#include"stdlib.h"
int main(void)
{
    pid_t pid;
    int count=0;
    if((pid=vfork())==-1)
      {
         printf("vfork error:%sn",strerror(errno));
         exit(1);
      }
    count++;
    printf("count=%dn",count);
    return(0);
}
执行结果为:
count=1
count=1
段错误

而把return(0)换成exit(0)后
就能顺利执行呢?此时结果为
count=1
count=2
期待各位大侠回答 

|
           Parent and child processes share the same stack space within the
           [vfork,exec] window.  If the size of the stack has been changed
           within this window by the child process (return from or call to a
           function, for example), it is likely that the parent and child
           processes will be killed with signal SIGSEGV or SIGBUS.

|
vfork() differs from fork(2) in that the parent is suspended until the child
       terminates (either normally, by calling _exit(2), or abnormally, after
       delivery of a fatal signal), or it makes a call to execve(2).  Until that
       point, the child shares all memory with its parent, including the stack.  The
       child must not return from the current function or call exit(3), but may call
       _exit(2).


|

正如4楼所说,问题在于vfork.
如果没有使用vfork(), 在main函数中return (0)和exit(0)是没有区别的。

|
#include"stdio.h"
#include"errno.h"
#include"unistd.h"
#include"stdlib.h"
int main(void)
{
pid_t pid;
int count=0;
if((pid=vfork())==-1)
{
perror("vfork()");
exit(1);
}
count++;
printf("%dn",getpid());
printf("count=%dn",count);
exit (0);
}



return 0时,一部分结果
22985
count=1
15974
count=2
22986
count=1
15974
count=2
22987
count=1
15974
count=2
22988
count=1
15974
count=2
22989
count=1
15974
count=2
22990
count=1
15974
count=2
22991
count=1
15974
count=2
22992
count=1
15974


exit 0时的结果:

23037
count=1
23036
count=2


return 0只是告诉linux  main函数的返回值是0
由于创建进程时,没结束进程的运行,父子进程会一直运行下去

exit 0表示正常退出函数

|
return(0) 在main函数中返回是等同于exit(0)的,exit(0) 无非就是做下清理工作

ls说上父进程会一直跑下去?测试过没?

|
return 函数返回。。结束一个函数
exit是抛出异常。。。结束整个进程 

|
http://docs.hp.com/en/B2355-90682/vfork.2.html

看来还是要多看手册...

    
 
 

您可能感兴趣的文章:

  • 进入程序后的第一个函数main的函数地址是存放在那个寄存器?
  • linux下,在调用main()函数之前怎样得到命令行参数argc和argv??『比如在main()前面构造全局对象时』
  • 如何把main函数隐藏到动态链接库中?(如MFC的做法?)
  • main函数返回收到segmentation fault
  • Linux0.11 内核源码 main函数的参数问题
  • main函数在线程执行完毕之前退出, 线程的哪些资源会被清理?
  • shell获取main函数的返回值
  • main.c:252:警告:隐式声明函数 `funcDef`
  • 关于main()函数参数调用的问题,老师请进~谢谢
  • C语言中怎么在main函数开始前执行函数
  • main函数中的参数args[]???
  • 执行一个main函数程序时,unix操作系统调用什么创建进程?fork?newproc?
  • gdb 如何调试带参数的main函数
  • Java中有没有类似于MessageBox的东东?想在main函数中调用,如何做
  • timer是不是不能在Main()函数中使用?
  • windows下的起始函数是winmain,但是qt的主函数是main,如何在windows下启动?
  • 谁能给我讲讲带参数的main函数的用法呀?
  • 在静态上下文中不能引用非静态方法test(),天啊,为什么我的main()不能调用任何其它函数?
  • 怎样用main()直接解译一个对话框?因为对话框的构造函数要一个激活他哪个窗体的参数
  • 请问关掉client 端 main函数结束 发RST包,怎么处理阿。。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.print.attribute.standard类mediatray的类成员方法: main定义及介绍
  • public static void main(String args[]){...},父类与子类同时定义有这样的main方法,但在子类中运行main时,程序却跑到父类的main中执
  • java命名空间javax.print类serviceuifactory的类成员方法: main_uirole定义及介绍
  • main(String args[])与main(String[] args)有什么区别?
  • java命名空间java.util.jar类attributes.name的类成员方法: main_class定义及介绍
  • main(int argc,char *argv[])和main(int argc,char **argv[])的区别
  • 我试了一下,main()可以不要public,正常执行.但是Sun的教程上说main()必须是public+static+void的,请各位高手讨论一下!
  • 他们说是环境不正确:以知我的代码(极简的),编译没错,运行时出错:“java.lang.NoSuchMethodError: main /Exception in thread "main"
  • 请教一个简单问题。一个BEAN是怎么运行的啊?我运行书里的一个BEAN,告诉我没有main(),可是程序里是有main的啊??谢谢
  • 在root/zxf下生成的可执行文件main怎么运行?
  • 关于main()方法的一个问题
  • 浙ICP备11055608号-3 iis7站长之家
  • 在maven工程里运行java main方法
  • jar中怎么设定main文件?
  • 请问如何在程序中得到 main()Thread 的 Priority ??
  • cannot declare '::main' to be template
  • ☆ 请教大虾,如何在jar文件中设置 main-class ☆
  • main方法--新手的问题
  • 为什么JAVA里的main()必须是static的呢?谢谢指教!
  • g++ 编译出现:undefined reference to 'main'错误,请教如何解决?
  • android工程下不能运行java main程序的解决方法


  • 站内导航:


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

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

    浙ICP备11055608号-3