1、main函数的自然返回,return
2、调用exit函数
3、调用_exit函数
4、调用abort函数
5、接受能导致进程终止的信号:

    ctrl+c (^C)

    SIGINT(SIGINT中断进程) 

    SIGQUIT (进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号)

     ctrl + \ (^\Quit)

其中1、2、3为正常终止,4、5异常终止


exit和_exit函数都是用来终止进程的。当程序执行到exit和_exit时,进程会无条件的停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本程序的运行。

exit函数和_exit函数的最大区别在于exit函数在退出之前会检查文件的打开情况,把文件缓冲区中的内容写回文件,也就是清理I/O缓冲。

exit可输出缓冲区数据

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Using exit\n");
    printf("This is the content in buffer");
    exit(0);
}

//运行结果:
Using exit
This is the content in buffer

_exit无法输出缓冲区数据

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
        printf("Using exit\n");
        printf("This is the content in buffer");
        _exit(0);
}
//运行结果:
Using exit

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

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *stream;
    if((stream = fopen("nofilehere", "r")) == NULL)
    {
         perror("Can not open");
         abort();
   }
   else
   {
        fclose(stream);
   }
   return 0;
}

运行结果:

Can not open: No such file or directory
Aborted (core dumped)
Logo

更多推荐