用户名: 密码: 忘记密码? 注册

linux进程开发之(四):exit()与_exit

作者:  时间: 2010-10-25
linux中典型的结束进程的函数有:exit()和_exit(),下面主要来分析exit()函数
 
exit.c
#include<stdio.h>
#include<stdlib.h>
int main()
{
 printf("using exit ...\n");
 printf("this is the content in buffer");
 exit(0);

}
/*---------------------------------------------------
1.exit和_exit函数说明
exit和_exit函数都是用来终止进程的。当程序执行到exit或_exi时,进程会无条件地
停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。但是,
这个函数还是有区别的。
_exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内
核中的各种数据结构:exit()函数则在这些基础上作了一些包装,在执行退出之前加了
若干道工序。exit()函数与_exit()函数最大的区别就是在于exit()函数在调用exit系统
之前要检查文件的打开情况,把文件缓冲中的内容写回文件,就是"清理I/O缓冲"。
2.在linux的标准函数库中,有一种被称为"缓冲I/O(buffered I/O)操作,其特征就是对
应每一个打开的文件,在内存中都有一片缓冲区。每次读文件时,会连续读出若干条记录,
这样在下次读文件时就可以直接从内存的缓冲区中读取;同样,每次写文件的时候,也仅
仅是写入内存中的缓冲区,等满足一定的条件(如达到一定数量或遇到特定字符等),再将
缓冲区中的内容一次性写入文件。
3.exit和_exit函数语法
1)所需头文件
exit:#include<stdlib.h>
_exit:#include<unistd.h>
2)函数原型
exit: void exit(int status)
_exit:void _exit(int status)
3)函数传入值
status是一个整型的参数,可以利用这个参数传递进程结束时的状态。一般来说,0表示
正常结束,其他的数值表示出现了错误,进程非正常结束。
在实际编程时,可以用wait系统调用接收子进程的返回值,从而针对不同的情况进行不同的
处理。
4.在一个进程调用了exit之后,该进程并不马上就完全消失,而是留下一个称为僵尸进程
(Zombie)的数据结构。僵尸进程是一种很特殊的进程,它几乎已经放弃了所有内存空间,没有
任何可执行代码,而不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等
信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。
-----------------------------------------------------*/
 
实验:
 
1.[root@localhost the_seventh_step]# gcc exit.c -o exit
2.[root@localhost the_seventh_step]# ./exit
using exit ...
this is the content in buffer
 
 
_exit.c
 
#include<stdio.h>
#include<unistd.h>
int main()
{
 printf("using _exit ...\n");
 printf("this is the content in buffer");
 _exit(0);
}
 
实验:
[root@localhost the_seventh_step]# gcc _exit.c -o _exit
[root@localhost the_seventh_step]# ./_exit
using _exit ...