进程退出
进程退出主要分为两种:正常退出、异常退出
1.正常退出
正常退出分为以下几种:
1.main函数调用return
2.进程调用exit(),标准c库
3.进程调用 _exit() 或者 _Exit() ,属于系统调用
4.进程最后一个线程返回
5.最后一个线程调用pthread_exit(4和5与线程有关)
2.异常退出
异常退出分为以下几种:
1.调用abort函数
2.当进程收到某些信号时,如 ctrl+C
3最后一个线程对取消 (cancellation) 请求做出响应
退出函数的解析
退出函数分别有exit()、_exit()、_Exit(),其函数原型和参数如下:
函数原型 | 所包含头文件 | 参数 |
void exit(int status) | <stdlib.h> | exit(0)正常退出;exit(1)异常退出 |
void _exit(int status) | <unistd.h> | _exit(0)正常退出;_exit(1)异常退出 |
void _Exit(int status) | <stdlib.h> | _Exit(0)正常退出;_Exit(1)异常退出 |
status 是一个整型的参数,可以利用这个参数传递进程结束时的状态。一般来说,0表示正常结束;其它的值表示出现了错误,进程非正常结束在实际编程时,可以用 wait()系统调用接收子述程的返回值,针对不同的情况进行不同的处理。
第二种与第三种类似,但第一种与其他两种有一定的区别,区别如下:
_exit()函数的作用是: 直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构
exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序.
exit()函数和_exit()函数的最大区别就在于exit()函数在终止当前进程之前要检查该进程,打开过那些文件,把文件缓冲区中的内容写回文件,也就是图中的 "清除I/O缓冲" 一项.