免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4394 | 回复: 4
打印 上一主题 下一主题

vfork后exit ,_exit的区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-10 16:19 |只看该作者 |倒序浏览
使用了exit按理说应该会关闭所有的打开的流,使用vfork出来的子进程用exit退出的话,因为子进程在父进程的地址空间运行,所以其父进程的流应该被关闭,最后一条pid就打不出来了,这点在unix上我验证了,但是在linux里面发现vfork出来的子进程exit退出和_exit退出没有区别.代码大致如下:
#include <sys/types.h>

main( int argc,char* argv[] )
{
    pid_t pid;

    if( ( pid = vfork( ) ) < 0 )
//    if( ( pid = fork( ) ) < 0 )
        printf( "fork error!\n" );

    if( pid == 0 ){
        printf( "child process!\n" );
//        _exit(0);
        exit(0);
    }
else
        printf( "pid[%d]\n",getpid() );

    exit(0) ;
}

论坛徽章:
0
2 [报告]
发表于 2007-07-10 16:36 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2007-07-11 09:08 |只看该作者
_exit的具体功能与各平台的实现有关,但_exit不是会关闭打开的文件流的...

论坛徽章:
0
4 [报告]
发表于 2007-07-12 11:00 |只看该作者
exit函数依据不同的Unix系统实现不同。
有些会关闭打开的流,有些不会。
因为在进程退出后会由内核关闭进程打开的所有流,
所以现代的Unix系统的实现中一般不会在exit函数中关闭流。

论坛徽章:
0
5 [报告]
发表于 2008-12-16 10:22 |只看该作者

帮我看看这个吧

#include<stdio.h>
#include<sys/types.h>


int main()
{
  int   a = 1;
  int   b = 2;
  int   c;
  int   d;
  pid_t pid;
  
  pid = vfork();
  
  if (pid==0)
  {
    c = b-a;
    printf("child pid = %d\n",getpid() );
    printf("%d\n",c);

  }
  else
  {
    d  = b-a;
    printf("parent pid = %d\n",getpid() );
    printf("%d\n",d);
  }
  return(0);//exit(0)正常,return有段错误,但d还是能打出来 但是是随即的 是不是 return返回了 其局部变量出栈了 但为什么exit可以正常 _exit也正常
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP