进程的退出--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)的数据结构。


posted @ 2018-06-03 23:44  雨中遐想  阅读(7)  评论(0编辑  收藏  举报  来源