`

exit()’与‘_exit()’

阅读更多
#define __NR_exit                 1
#define __NR__exit __NR_exit /* 摘自文件include/asm-i386/unistd.h*/
   "__NR_"是在Linux的源码中为每个系统调用加上的前缀,请注意第一个exit前有2条下划线,第二个exit前只有1条下划线。
Linux核心还提供了一些C语言函数库,这些库对系统调用进行了一些包装和扩展,因为这些库函数与系统调用的关系非常紧密,所以习惯上把这些函数也称为系统-调用。#define这句只能说明内核里的两个系统调用_exit和exit相同,但其封装后对应的C库函数_exit()和exit()是不同的。
   exit()函数定义在stdlib.h中,而_exit()定义在unistd.h中。
   _exit()函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit()函数则在这些基础上作了一些包装-,在执行退出之前加了若干道工序,也是因为这个原因,有些人认为exit已经不能算是纯粹的系统调用。
   exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,即所谓的"清理I/O缓冲"。
   ‘exit()’与‘_exit()’有不少区别在使用‘fork()’,特别是‘vfork()’时变得很突出。
   ‘exit()’与‘_exit()’的基本区别在于前一个调用与实施库里用户状态结构(user-mode constructs)有关的清除工作(clean-up),而且调用用户自定义的清除程序 (译者注:自定义清除程序由atexit函数定义,可定义多次,并以倒序执行),相对 应,后一个函数只为进程实施内核清除工作。
   在由‘fork()’创建的子进程分支里,正常情况下使用‘exit()’是不正确的,这是因为使用它会导致标准输入输出(译者注:stdio: Standard Input Output)的缓冲区被清空两次,而且临时文件被出乎意料的删除(译者注:临时文件由tmpfile函数创建在系统临时目录下,文件名由系统随机生成)。在C++程序中情况会更糟,因为静态目标(static objects)的析构函数(destructors)可以被错误地执行。(还有一些特殊情况,比如守护程序,它们的父进程需要调用‘_exit()’而不是子进程;适用于绝大多数情况的基本规则是,‘exit()’在每一次进入‘main’函数后只调用一次。)
   在由‘vfork()’创建的子进程分支里,‘exit()’的使用将更加危险,因为它将影响父进程的状态。

vfork与fork的区别
  vfork与fork主要有三点区别:
  .fork():子进程拷贝父进程的数据段,堆栈段
  vfork():子进程与父进程共享数据段
  .fork()父子进程的执行次序不确定vfork 保证子进程先运行,在调用 exec 或 exit 之前与父进程数据是共享的,在它调用 exec或 exit 之后父进程才可能被调度运行。
  .vfork()保证子进程先运行,在它调用 exec 或 exit 之后父进程才可能被调度运行.如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

#include <stdlib.h>
函数名: abort

功 能: 异常终止一个进程

用 法: void abort(void);

abort()是使异常程序终止,同时发送SIGABRT信号给调用进程。

程序例:

#include  <stdio.h>
#include  <stdlib.h>
void main( void )
{
   FILE *stream;
   if( (stream = fopen( "NOSUCHF.ILE", "r" )) == NULL )
   {
      perror( "Couldn't open file" );
      abort();
   }
   else
      fclose( stream );
}

输出:
Couldn't open file: No such file or directory
abnormal program termination
分享到:
评论

相关推荐

    EXIT_regular.zip_EXIT_EXIT Chart_LDPC EXIT chart_LDPC regular_ex

    regular LDPC EXIT EXIT_chart EXIT_chart_regular

    exit (2)_EXIT_exit过程_

    为了获取这些文件的具体内容和与`exit`过程的关联,你需要解压`EXIT.zip`并查看其中的文件。 总结来说,`exit`是MATLAB中一个强大的控制流工具,它能帮助我们精确地管理程序的结束和状态。结合`onCleanup`、`try-...

    Z_FIND_USEREXIT_SAP增强查找Z_USEREXIT_

    标题中的"Z_FIND_USEREXIT_SAP增强查找Z_USEREXIT_" 提到的是一个专门用于寻找和管理SAP用户出口(User Exits)的工具。用户出口是SAP提供的一种预定义的扩展点,允许开发人员在不修改标准代码的情况下插入自定义...

    fukangwei#New_Blog_MarkDown#exit和_exit的区别1

    title: exit和_exit的区别categories: Linux系统编程exit与_exit最大的区别就在于:exit在执行之前,要清理I/O缓冲区中

    EXIT_TURBO.rar_EXIT turbo_turbo_turbo 迭代_turbo码exit_turbo迭代

    这个“EXIT_TURBO.rar”压缩包包含了一系列与Turbo码 EXIT 图迭代相关的程序和数据文件,适合于深入理解和研究Turbo码的工作原理。 在Turbo码中,有两个基本的组件:交织器和并行或串行的涡轮编码器。交织器的作用...

    nonbinary_EXIT_NonBinary_EXIT_NonBinaryLDPC_LDPCEXIT_EXIT_非二进制ld

    与传统的二进制LDPC码相比,非二进制LDPC码允许在更广泛的代数结构上操作,如GF(2^m)域,从而提供更高的编码效率和更优的性能。本篇将深入探讨非二进制LDPC码的非二进制EXIT(Iterative Exchange of Information ...

    SAP userexit - save prepare 中报错解决方案

    在本案例中,具体涉及的用户退出点是"USEREXIT_CHECK_VBEP"和"USEREXIT_SAVE_DOCUMENT_PREPARE",这两个都是与销售订单处理相关的。 USEREXIT_CHECK_VBEP是在创建或更改销售订单时调用的用户退出,特别是在执行检查...

    Protograph_EXIT_chart-master_protograph_potatoesxu5_voyage1m6_ld

    本篇文章将深入探讨标题“Protograph EXIT_chart-master_protograph_potatoesxu5_voyage1m6_ld”所涉及的知识点,并结合压缩包内的文件"Protograph_EXIT_chart-master"进行阐述。 一、Protograph概念 Protograph是...

    KEY_EXIT.rar_FACLORY EXIT KEY_stm 按键

    这些文件可能包括了STM32的初始化代码、中断服务函数定义以及与按键相关的逻辑。通过阅读和理解这些代码,我们可以学习到STM32的GPIO中断配置、中断服务函数的编写技巧,以及如何将这些组件整合到实际应用中。 总的...

    EXIT chart.rar_Chart ldpc_LDPC_LDPC EXIT_LDPC EXIT chart_LDPC、EX

    **EXIT图表(Iterative Decoding EXIT Chart)**是评估和设计LDPC码迭代解码性能的一种强大工具。 **LDPC码的核心概念:** 1. **稀疏矩阵**:LDPC码的定义基于一个稀疏的校验矩阵,其中大部分条目为0,只有少数为1...

    EXIT_LDPCEXIT_EXIT_LDPC_

    总结来说,EXIT分析是LDPC码性能评估和优化的关键工具,它通过直观的图形方式揭示了信道条件与解码过程之间的关系,帮助我们理解并提升LDPC码的解码效率。在设计和实现高效LDPC编码系统时,EXIT分析是不可或缺的一...

    Stm32Exit_stm32_EXIT_

    "STM32Exit_stm32_EXIT_"这个标题暗示了我们主要讨论的是STM32微控制器中的退出(EXIT)操作,可能是指系统或中断服务例程的退出流程。描述中提到的基础例程和对初学者的帮助,表明我们将探讨一个适合新手学习的STM...

    EXIT_EXITChart_EXIT_源码.rar

    标题中的"EXIT_EXITChart_EXIT_源码.rar"可能是一个源代码压缩包,通常包含某个程序或项目的源代码文件。从这个标题来看,我们推测这可能是关于一个名为"EXIT"的项目,可能涉及到图表(Chart)的创建或处理,并且与...

    Exit9_task2(1).c

    Exit9_task2(1).c

    module的__init__exit

    在 Linux 内核中,__init__ 和 __exit__ 是两个特殊的宏,用于告诉内核在静态编译时对这些函数进行特殊处理。当内核编译成模块时,这两个宏起着关键的作用。 __init__ 宏 __init__ 宏用于标记某些函数或初始化数据...

    详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别

    详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别 os._exit() 和 sys.exit() os._exit() vs sys.exit() 概述 Python的程序有两中退出方式:os._exit(), sys.exit()。本文介绍这两种方式的...

    wangs.rar_exit ldpc_元胞自动机_元路径

    在本资料包“wangs.rar_exit_ldpc_元胞自动机_元路径”中,重点探讨的是元胞自动机在模拟行人流运动中的应用,以及与之相关的退出策略(exit strategy)和低密度奇偶校验码(Low-Density Parity-Check,LDPC)。...

    EXIT_EXITChart_EXIT.zip

    通过"EXIT_EXITChart_EXIT_源码.zip",我们可以深入研究上述各个方面的实现细节,了解如何设计和实现一个高效、用户友好的图表退出系统。无论是对于初学者还是经验丰富的开发者,这样的源码都是一份宝贵的教育资源。

    OpenVent_CPAP_pump_exit_open_pumpexit_

    综上,"OpenVent_CPAP_pump_exit_open_pumpexit_" 代表的是一款注重用户维护和卫生安全的开源CPAP设备,它的设计和制造考虑到了实际使用中的可操作性与可维护性,体现了现代医疗设备结合先进科技与人性化设计的理念...

Global site tag (gtag.js) - Google Analytics