linux exit函数学习

exit是一个库函数,在进程正常结束时调用,
#include <stdlib.h>

void exit(int status);

_exit是一个系统调用,用来终止一个进程,
#include <unistd.h>

void _exit(int status);

exit与_exit都是用来正常退出进程,二者区别在于:
exit库函数会先检查进程打开文件的状况,并且负责把文件缓冲区中的内容写回到文件中;
而_exit系统调用则不会。
所以调用_exit系统调用退出进程有可能会造成文件内容丢失。

这是因为linux标准函数库,为了提高写文件的效率,提供了一种缓冲I/O机制。
每打开一个文件,都会从内存中开辟一个缓冲区,
这样写文件时它会先写到缓冲区中(并不是真正的写磁盘),
这样可以节省大量的I/O操作带来的频繁的从用户态往内核态切换的开销。
缓冲I/O机制的目的是为了提高写效率。

所以为了保证数据不会丢失,在进程退出时调用exit()函数会比较保险。
可以写一个简单的测试小程序来测试exit与_exit的差别。
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("test exit\n");
    exit(0);
}

由于标准I/O函数printf是行缓冲函数,所以有没有'\n'是会对实际结果产生影响的。
因为是行缓冲,所以遇到换行符时就会执行I/O操作。

linux系统进程终止的方式有正常退出和异常退出,
其中:
程序中调用exit或_exit或return掉都是属于正常退出方式;
如果是程序调用了abort函数或收到了某个能使进程终止的signal比如SIGSEGV等都属于异常退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值