进程终止 exit和_exit的区别

一、进程退出的三种场景

  • 代码运行完毕,结果正确
  • 代码运行完毕,结果错
  • 代码异常终止(不需要再看退出码)

二、进程常见退出方法(利用echo $?可以查看最近一个进程的退出码)

正常退出:

  • 从main函数返回
  • 调用exit
  • _exit
    注意:
    return :在main函数中调进程退出
    exit/_exit:在任何地方调进程都会退出

异常退出:

  • ctrl + c,信号终止

三、exit 和 _exit的不同

首先看一个例子:
调用_exit函数退出

#include <stdio.h>
#include <unistd.h>
int main()
{
	printf("hi lw");
	exit(-1);
}

执行结果:
在这里插入图片描述
从执行结果可以看出,执行程序之后,并没有输出结果,而且进程退出码是255,为什么???
调用exit函数退出

#include <stdio.h>
#include <unistd.h>
int main()
{
	printf("hi lw");
	exit(-1);
}

在这里插入图片描述
调用exit函数之后,打印出了结果,但是退出码还是255???
首先得明确一点,进程的退出码是int类型的,但是exit函数中供我们使用的错误码只有8个比特位(第8位到第16位),所以我们看到的退出码是255,而其他位被标记了别的信息,例如程序是否正常退出,如果是异常退出,退出码会指明它是什么原因退出的。
现在再谈一谈,为什么调exit和_exit,输出结果不一样???
首先看一下调这两个函数时程序的执行顺序:
在这里插入图片描述
调用_exit函数,程序退出非常粗暴,不刷新缓冲区,直接进入内核,所以我们在显示器上看不到结果,但是调用exit函数,会清理、关闭流、刷新,最后再进入内核,所以刷新出来的数据打印在显示器上我们就会看到了。
最后需要注意的是,虽然exit和_exit都终止了进程,但是但是进程退出之后,并不会立即释放全部资源,需要维护自身状态,判断进程退出结果。

四、return退出

通常我们在函数中执行的return n等同于执行exit(n),因为调用main运行时函数会将main的返回值当作exit的参数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值