• linux 之进程基础 (五)、进程API之进程终止API


    5 . 进程终止API

    5.1 exit()函数和_exit()函数

    exit()和_exit()函数都是用来终止进程的。当程序执行exit()和_exit()时,进程会无条件的停止剩下的所有操作。清除各种数据结构,并终止本进程的运行。但是这个两个函数运行还是有点区别的。

    5.2 exit()函数和_exit()函数 的区别

    5.2.1exit()函数和_exit()函数 的区别 示意图

    在这里插入图片描述

    • _exit()函数的作用最为简单:直接使进程终止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;
    • exit()函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是图中的"清理I/O缓冲"一项。

    总结:

    • Exit() 函数相当于在_exit上面加了一层封装
    • _exit() 结束程序不清理缓冲区。

    5.1.2 exit()函数和 return 关键字

    return 和 exit的区别

    • return是关键字exit是函数;
    • exit是系统级的它表示进程的结束,而return是语言级的它表示函数调用堆栈返回。
    • main函数中return 0会隐式的调用exit(). 因此 程序结束的时候会清理缓冲区。

    5.1.3 实验验证exit()和 _exit()函数

    //文件1:test_exit.c
    #include <stdio.h>                                                                                                                             
    #include <unistd.h>
    #include <stdlib.h>
    
    int
    main()
    {
        printf("hello world");
        _exit(0);
    }
    //文件2test_exit2.c
    #include <stdio.h>                                                                                                                             
    #include <stdlib.h>
    
    int
    main()
    {
        printf("hello world");
        exit(0);
    }   
    
    

    将上述代码编译后分别命名为:

    • test_exit
    • test_exit2

    执行后的结果如下:
    在这里插入图片描述 可以看到由于_exec() 函数不刷新缓冲区,因此不会在终端中打印。

  • 相关阅读:
    一个粗心造成的死循环
    LinearGradientBrush使用
    一个需求引发的关于平板电脑的思考
    开发照片采集系统中的问题总结
    List<T>的Add方法等
    开发相机拍照组件中需要解决的问题,一月回顾
    ShowDialog使用
    使用ActiveSyn,让WINMBILE的PDA连接WIN2003的杂牌蓝牙
    Jenkins安装教程
    Jmeter连接数据库
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764129.html
Copyright © 2020-2023  润新知