进程退出场景
代码运行完毕,结果正确
代码运行完毕,结果不正确
代码异常终止
进程退出
正常退出:
从main返回
我们在编写c/c++代码时,main函数最后总要return 0,
main函数的返回值是给谁返回的?
又是谁调用的?
返回值为什么就一定要是0,其他的数字不行吗?
main函数的返回值是给谁返回的
又是谁调用的
通常情况下,
main
函数的返回值是给os返回的,也是os调用的
返回值为什么就一定要是0,其他的数字不行吗
main
函数的返回值被用来表示程序的退出状态,通常是0表示成功,非0表示失败。
操作系统可以使用这个返回值来确定程序是否成功执行,
并在必要时采取相应的措施。
其他数字代表什么
首先认识一下strerror函数
通过strerror验证其他数字代表的含义
它可以将错误码转换为错误字符串
int main()
{
int i=0;
for(i=0;i<200;i++)
{
printf("[%d]: %s\n",i,strerror(i));
}
return 0;
}
果然,0对应的是成功,其他数字对应的是不同错误
在134号错误之后就是未知错误了
使用库函数exit终止进程
exit的参数即为错误码和main函数的return值是一个意思
exit函数和return的区别:
return只有在main函数中使用才表示进程退出
exit函数在任何地方都可以直接退出并且返回错误码
验证:
使用_exit函数终止进程
使用_exit函数退出进程的方法我们并不经常使用,_exit函数也可以在代码中的任何地方退出进程,但是_exit函数会直接终止进程,并不会在退出进程前会做任何收尾工作。
验证:
以下代码中使用_exit终止进程,则缓冲区当中的数据将不会被输出。
与exit对比一下:
_exit没有打印,exit打印出来了:
printf打印的数据如果不使用
\n换行的话,数据会被存储到缓冲区里,
暂时不会打印出来,然而使用exit函数
结束进程后,缓冲区的数据被打印出来了
所以可以得出结论:exit函数会帮助我们
刷新缓冲区的数据,然而_exit函数不会
异常退出:
当程序异常退出时,退出码就已经没有意义了,一般而言,
异常退出时return语句还没有执行就已经退出了。
向进程发生信号导致进程异常退出
例如:在进程运行过程中向进程发生kill -9信号使得进程异常退出,
或是使用Ctrl+C使得进程异常退出等。
向进程发生信号导致进程异常退出
例如:当程序中出现使用野指针或数组越界写入
时,程序会崩溃,崩溃等。
查看最近进程的退出码
指令:
echo $?
测试一下:
不出所料,退出码就是55,
但是为什么后面的退出码是0,
因为后面的退出码都是前一条echo $?的
echo $?都正常退出
所以退出码为0