Chinaunix首页 | 论坛 | 博客
  • 博客访问: 353998
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类: LINUX

2012-04-09 18:03:21

    Linux 进程正常终止有三种方式:
    1、main函数中return;
    2、调用exit;
    3、调用_exit;
 
  exit 与 _exit用于正常终止一个进程:_exit立即进入内核,exit则先执行一些处理,之后进入内核。
 
  exit函数原型及对应的头文件:
       #include
       void exit(int status);
  exit函数描述:
  exit函数会终止进程, 并将status&0377返回给其父进程。
  所有通过atexit注册的函数以及on_exit()均会被调用。所有打开的流均通过fclose关闭,tmpfile函数创建的文件会被删除。
  调用exit之后,status值会被传递到父进程。如果父进程设置了SA_NOCLDWAIT,或者设置SIGCHLD的处理函数为SIG_IGN,则返回值被丢弃。如果子进程调用exit时候,父进程尚未调用wait,则子进程成为zombia,直到父进程调用wait获知子进程的退出状态。如果支持SIGCHILD,则该信号被发送至父进程。
 
   _exit函数原型及对应头文件:
       #include
       void _exit(int status);
       #include
       void _Exit(int status);
    _exit函数描述:
    调用_exit会立即终止进程,所有打开的文件描述符被关闭,所有的子进程会直接过继给init,其父进程会受到SIGCHLD信号。
    status会被传递给父进程。_Exit与_exit等效。
 
    _exit 与exit函数类型,但其不会调用atexit注册的函数,至于是否执行缓存回写以及删除tmpfile创建文件等操作,则取决于具体实现。
    实例验证:
 19 #include
 20 #include

 26
 27 int main(int argc,char *argv[])
 28 {
 29    printf("Hello exit!\r\n");
 30    printf("This is just a test for exit or _exit.");
 31 

 33    _exit(0);
 34 }
     执行./testext
          Hello exit!
     执行下面代码:
 19 #include
 20 #include
 
 26
 27 int main(int argc,char *argv[])
 28 {
 29    printf("Hello exit!\r\n");
 30    printf("This is just a test for exit or _exit.");
 31 
 32    exit(0);

 34 }
    执行./testexit
         Hello exit!
         This is just a test for exit or _exit.
 
阅读(934) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~