本文主要是介绍exit和_exit函数和atexit函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
相对于return函数,exit和_exit是用于专门退出进程的函数,而return不是用于专门退出进程的,只是执行mian函数时,return可以退出进程。(return退出当前函数执行的栈空间,并返回当前函数执行的结果)
void _exit(int status);
功能:退出当前进程(系统调用不会刷新缓冲区)
参数:@status:进程退出状态(status & 0377)[0-255]#define EXIT_FAILURE 1 /* Failing exit status. */#define EXIT_SUCCESS 0 /* Successful exit status. */
返回值:无
void exit(int status);
功能:退出当前进程(库函数会刷新缓冲区)
参数:@status:进程退出状态(status & 0377)#define EXIT_FAILURE 1 /* Failing exit status. */#define EXIT_SUCCESS 0 /* Successful exit status. */
返回值:无
exit实例 刷新缓冲区 输出1 2
#include <head.h>
void func()
{printf("1\n");printf("2");exit(20); //退出进程,刷新缓冲区,子进程退出,父进程没有回收资源,子进程是僵尸态printf("3\n");//进程退出了,这句话不会执行
}
int main(int argc, const char *argv[])
{pid_t pid;pid = fork();if (pid == -1){perror("fork error");exit(-1);}else if (pid == 0){// 子进程func();}else{// 父进程while (1){}}return 0;
}
_exit实例 输出 1
#include <head.h>
void func()
{printf("1\n");printf("2");_exit(20); //退出进程,刷新缓冲区,子进程退出,父进程没有回收资源,子进程是僵尸态printf("3\n");//进程退出了,这句话不会执行
}
int main(int argc, const char *argv[])
{pid_t pid;pid = fork();if (pid == -1){perror("fork error");exit(-1);}else if (pid == 0){// 子进程func();}else{// 父进程while (1){}}return 0;
}
在main函数中遇到return后还能够调用其他函数?
可以,通过atexit函数完成回调函数的注册
#include <head.h>
void func(void)
{printf("11111111111111111\n");
}
int main(int argc,const char * argv[])
{// 注册进程退出后被回调的函数atexit(func);//注册 还没调用printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);return 0;
}
这篇关于exit和_exit函数和atexit函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!