atexit()使用】的更多相关文章

使用该函数注册的退出函数是在进程正常退出时,才会被调用.这里强调是进程正常退出,使用exit退出或使用main中最后的return语句退出.但如果是因为收到信号signal而导致程序退出,如kill pid,那么atexit所注册的函数将不会被调用.而当进程收到信号时,如果没有注册函数去处理对应的信号,那么内核就会执行信号的默认动作,一般就是直接终止进程.这个时候,进程的退出完全由内核来完成,自然就不会调用到C库的exit函数了,从而也就无法调用注册的退出函数了. 下面是一个atexit的例子-…
atexit函数 atexit函数的原型如下 void atexit(void (*func)(void)) 它是一个参数为返回值和参数均为空的函数指针的函数,含义是当前进程结束之前执行参数函数指针所指向的函数,使用的时候要在main中注册,一次可以注册很多函数,函数的执行顺序与注册的先后有关,关系恰好相反,第一个注册的函数反而是最后一个执行.下面是执行实例. #include<stdio.h> #include<stdlib.h> void func1() { printf(&q…
很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束.在程序的某个地方用exit()结束程序.用户通过Ctrl+C或Ctrl+break操作来终止程序等等,因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理.方法就是用atexit()函数来注册程序正常终止时要被调用的函数. atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数.atexit()的函数原型是:#include <cstdlib…
这几个函数都在头文件#include <stdlib.h>中声明.exit._Exit与abort函数使程序终止,控制并不返回到这些函数的调用者. exit()函数 void exit(intstate); exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束.main函数结束时也会隐式地调用exit函数.exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有…
前言: 最近帮朋友review其模块服务代码, 使用的是python的twisted网络框架. 鉴于之前并没有使用过, 于是决定好好研究一番. 不过这个问题, 和twisted网络框架本身没有关系, 而是为了提升QPS性能, 引入了多进程模型而遇到的一个奇怪问题. 本文将讲述python的多进程机制, 以及atexit的清理函数机制. 权作python的学习笔记. 场景构造: 具体的业务代码可以简化为如下所述: 父进程开启多个常驻子进程后, 安然"退休"并结束运行. 进程的创建借助mu…
跟atexit函数相识已久,man手册里对atexit的解释是这么一段: The atexit() function registers the given function to be called at normal process termination, either via exit() or via return from the program’s main(). Functions so registered are called in the reverse order of…
atexit()函数  头文件:#include<stdlib.h> 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*func)(void)); 注意:按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用.atexit()注册的函数类型应为不接受任何参数的void函数,exit调用这些注册函数的顺序与它们登记时候的顺序相反.同一个函数如若登记多次,则也会被调用多次. 例: 运行结果:…
一,进程终止有5种方式: 正常退出: 从main函数返回 调用exit 调用_exit 异常退出: 调用abort 由信号终止 二,exit和_exit区别: 关于_exit(): #include <unistd.h> void _exit(int status); #include <stdlib.h> void _Exit(int status); DESCRIPTION        The function _exit() terminates the calling p…
摘要:本文主要讲述进程的终止方式,以及怎样使用exit()函数来终止进程.回收进程用户空间资源:分析了exit()函数与_exit()函数,returnkeyword的差异.同一时候具体解读了怎样使用atexit()和on_exit()函数来注冊终止处理程序. 进程终止.回收资源 1.进程终止方式 在内核中,程序运行的唯一方法是调用一个exec函数.而进程自愿终止的唯一方法是显示或隐式地调用_exit()或_Exit().     进程有5种正常终止方式: (1)常见的一种是,在main函数中运…
atexit模块很简单,只定义了一个register函数用于注册程序退出时的回调函数,我们可以在回调函数中做一些资源清理的操作. 注意回调函数只有正常退出的时候才会调用,如果程序是被信号杀死或者因为严重错误导致退出,或者使用os._exit()退出程序的时候,回调函数不会调用. 我们也可以通过sys.exitfunc来注册回调,但通过它只能注册一个回调,而且还不支持参数.所以建议大家使用atexit来注册回调函数.但千万不要在程序中同时使用这两种方式,否则通过atexit注册的回调可能不会被正常…