Linux 之exit() 进程退出函数

本文介绍了Linux环境下进程退出的三种方式,并详细对比了exit()和_exit()函数的差异。exit()在退出前会处理文件缓存,而_exit()则直接释放资源,不会进行缓存处理。通过示例程序展示了这两个函数的不同效果。
摘要由CSDN通过智能技术生成
  • 进程的退出
    linux下进程数量太多会导致系统崩溃,在使用完一个进程之后要及时终止它。
    进程退出一般有三种方法:
    1、在main函数中使用 return关键字 ,使用 return 后系统会调用 exit()函数来终止进程。
    2、手动调用 exit() 来终止进程。
    3、调用 _exit() 来终止进程。

  • exit()_exit() 函数

头文件

#include<unistd.h>
#include<stdlib.h>

原型

void _exit(int status);
void exit(int status);

_exit()
os立刻把管理内存的结构体、虚拟内存释放掉。
exit()
不会马上干掉结构体,先看先看当前进程有没有文件缓存区,若有则会先处理缓存区中的数据,然后销毁结构体。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{	
	pid_t res;
	res = fork();
	if(res == -1)
	{
		printf("fork err\r\n");
	}
	if(res == 0)
	{
		//不加回车换行符,让输出的字符串数据保留在io缓存区里面
		printf("son");
		//退出状态设置为0,表示正常退出。
		_exit(0);
	}
	else if(res > 0)
	{
		printf("parent");
		exit(0);
	}
}


编译后执行结果

jl@jl-virtual-machine:~/test$ ./a.out 
parentjl@jl-virtual-machine:~/test$ 
jl@jl-virtual-machine:~/test$ 
  • 注意第二行开头的parent,因为在父进程中用的是 exit() 函数,在进程退出前会先处理完缓存区中的数据,所以缓存区中滞留的parent在推出前被打印出来。

  • 使用\r\n输出字符串则会被立即打印。

  • 补充
    C语言中的exit()函数与 return 对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值