exit和_exit函数和atexit函数

作者 : admin 本文共1272个字,预计阅读时间需要4分钟 发布时间: 2024-06-17 共1人阅读

相对于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 
void func()
{
    printf("1
");
    printf("2");
    exit(20);  //退出进程,刷新缓冲区,子进程退出,父进程没有回收资源,子进程是僵尸态
    printf("3
");//进程退出了,这句话不会执行
}
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 
void func()
{
    printf("1
");
    printf("2");
    _exit(20);  //退出进程,刷新缓冲区,子进程退出,父进程没有回收资源,子进程是僵尸态
    printf("3
");//进程退出了,这句话不会执行
}
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 
void func(void)
{
    printf("11111111111111111
");
}
int main(int argc,const char * argv[])
{
    // 注册进程退出后被回调的函数
    atexit(func);//注册 还没调用
    printf("%s:%s:%d
",__FILE__,__func__,__LINE__);
    return 0;
}

本站无任何商业行为
个人在线分享 » exit和_exit函数和atexit函数
E-->