进程的退出--exit()与_exit()的区别
进程终止:①异常终止;②正常终止
异常终止:①进程收到某种信号;
②调用abort()函数;[堕胎]
正常终止:①main()函数返回
②调用exit()函数
三、调用_exit()函数或_Exit()函数
exit()函数执行时会无条件停止剩下的所有操作,清理包括PCB在内的各种数据结构,并终止本进程的运行,在执行推出之前加了若干道工序,它要检查文件的打开情况,把文件缓冲区的内容写回文件,即“清理I/O缓冲”。
_exit()函数的作用是直接使进程停止运行,清楚其使用的内存空间,并清楚其在内核中的数据结构。
程序说明:
exit1.c
/****exit1.c****/
#include<stdio.h>
#include<stdlib.h>
main(){
printf("hello\n");
printf("world\n");
exit(0);
}
exit2.c
/****ecit2.c****/
#include<stdio.h>
#include<unistd.h>
main(){
printf("hello\n");
printf("world\n");
_exit(0);
}
运行结果:
调用_exit()函数时,缓冲区的记录无法输出。
调用exit()函数时,缓冲区的记录也能正常输出。调用exit()之后,该进程并不会马上完全消失,而是留下了一个成为僵尸(Zombie)的数据结构。
---------------
我每一次回头,都感觉自己不够努力,所以我不再回头。
---------------