进程控制-进程终止

进程退出场景

代码运行完毕,结果正确
代码运行完毕,结果不正确
代码异常终止

进程退出

正常退出:
从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

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值