zoukankan      html  css  js  c++  java
  • 14、【C语言基础】__exit() exit() return的区别

    __exit()  exit() return的区别

    _exit()  --- 直接结束进程进入到内核中
    exit()    --- 清理I/O缓冲区后再退出进程
    return   --- 函数返回

    【实例】

    __exit():

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <unistd.h>
     4 
     5 int main()
     6 {
     7     int ret = 0;
     8     printf("I'm ok!
    ");
     9     printf("Good good study!");
    10 
    11     _exit(0);
    12 }

    执行结果:

    I'm ok!
    

     【实例】

    exit()

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <unistd.h>
     4 
     5 int main()
     6 {
     7     int ret = 0;
     8     printf("I'm ok!
    ");
     9     printf("Good good study!");
    10 
    11     exit(0);
    12 }

    执行结果:

    I'm ok!
    Good good study!
    

    当把第二个输出信息后面加一个" ";两个程序的结果都会输出相同的结果,两个打印信息都会打印出来。

    原因如下:

    printf函数就是使用的是缓冲I/O的方式,该函数在遇到“ “换行符时自动的从缓冲区中将记录读出。所以exit()将缓冲区的数据写完后才能退出来,所以调用exit()函数后程序并不会马上退出,这就是有些出现的僵尸程序,而_exit是直接退出进入到内核中去。

    总的来说_exit()执行后会立即返回给内核,而exit()会先执行一些清除操作然后将控制权交给内核,就是说在调用_exit函数的时候它会关闭所有的文件描述符,清理内存和其他的一些内核清理函数,但是不会刷新(stdin,stdout,stderr...),而exit就是在调用_exit()函数的前面先刷新流。

     注:
    1、return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束
    2、return是返回函数调用,如果返回的是main函数,则为退出程序
    3、exit是在调用处强行退出程序,运行一次程序就结束

  • 相关阅读:
    持续集成-禅道
    nohup.out 日志切分
    Flannel 介绍及使用场景
    【Unity游戏开发】初探Unity动画优化
    fastHttp服务端处理请求的过程
    PHPExcel导出文件代码实现
    PHPExcel 1.8
    CKfinder 安装与使用
    Ckeditor的配置
    Ckeditor的使用
  • 原文地址:https://www.cnblogs.com/Long-w/p/9673765.html
Copyright © 2011-2022 走看看