Linux进程控制之进程终止

进程终止

进程终止时,操作系统释放进程申请的相关内核数据结构和对应的数据和代码,本质就是释放系统资源。

进程终止的常见场景

  1. 代码跑完,结果正确
  2. 代码跑完,结果错误
  3. 代码没有跑完,程序崩溃了

main函数返回值的意义

main函数返回值叫做进程的退出码
查看最近一个进程的进程退出码

echo $?

main函数返回值返回给上一级进程,用来评判进程执行结果。
return 0,表示程序运行结果正确
return 非0,表示运行结果不正确
不同的非0值可以表示不同的错误原因,这样在我们的进程结束之后,结果不正确的时,方便定位错误的原因。

strerror函数
#include <string.h>
char *strerror(int errnum);

根据不同的进程退出码,返回错误的原因
在这里插入图片描述
我们可以使用这些退出码的含义,但是你也可以自己设计一套退出方案。

当程序崩溃的时候,退出码时无意义的。

进程终止的方法

main函数内的return语句,就是终止进程的。

普通函数内的return是终止函数调用的,main函数内的return语句可以直接终止进程

exit()函数

C语言的一个库函数

 #include <stdlib.h>
 
 void exit(int status);

代码演示:

#include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>                                                                                                                             
  4 int main()
  5 {
  6     printf("hello world\n");
  7     printf("hello world\n");
  8     printf("hello world\n");
  9 
 10     exit(222);
 11 
 12     printf("hello world\n");
 13     printf("hello world\n");
 14     printf("hello world\n");
 15     printf("hello world\n");
 16     printf("hello world\n");
 23     return 0;
 24 }

执行结果:
在这里插入图片描述
进程退出码就是exit函数的参数。

_exit()函数

这是一个系统接口函数

       #include <unistd.h>
       void _exit(int status);

这个函数执行效果和exit函数基本一样,但是在涉及到io操作时不一样。
看示例:

#include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <unistd.h>
  5 
  6 int main()
  7 {
  8     printf("hello world");                                                                                                                      
  9     sleep(3);
 10 //    exit(1);
 11     _exit(1);
 32 }

当printf函数不带\n时,缓冲区里面的内容不会被刷新出来,当执行exit函数时,sleep三秒后进程退出,缓冲区的内容刷新到屏幕上
在这里插入图片描述
但是当我执行_exit函数时,缓冲区的内容并没有被刷新到缓冲区上。
在这里插入图片描述
这就是这俩函数的差别:
在这里插入图片描述
这样我们可以窥见,printf函数中数据是保存在缓冲区中的,这个缓冲区一定不在操作系统内部,假如说在操作系统内部,那么_exit()函数也能把缓冲区刷新出来,其实这个缓冲区是由C标准库维护的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值