进程(5)——进程终止【linux】

进程(5)——进程终止【linux】本文详细解释了 Linux 进程中正常终止 出错终止和异常退出的区别 通过 C 语言示例探讨了 return exit 和 exit 的差异 并介绍了查看返回值和使用 errno 处理错误的方法

大家好,欢迎来到IT知识分享网。


主要内容:
1.进程终止的情况
2.查看进程终止的结果

一. 进程结束情况

这里进程终止可以分成三种情况

i. 正常终止

正常就是程序正确完整的执行完了程序内容。

ii. 出错终止

出错终止就是程序执行了程序内容,出现了错误,但是程序终止了

iii. 异常退出

异常退出是产生错误,导致程序崩溃,程序被迫终止

二. 进程返回值(针对正常和出错)

其实区分的方式就是我们平常写代码时不经意中写的一行代码

#include<stdio.h> int main() { 
     printf("hello world"); return 0; } 

这里就拿入门时候看吐的hello world来举例子

2.1. 进程的退出方式

这里我们就来了解一下进程终止的常见三种方式。

i. return

这个算是我们最常用的终止方式了

它的特点是终止程序后,会返回到上级函数中,程序会继续执行

#include<stdlib.h> #include<stdio.h> int test() { 
     int arr[10]; int* i=(int*)malloc(sizeof(arr[10])); if(i==NULL) { 
     return -1; } else { 
     return 0; } } int main() { 
     if(test()==-1) { 
     printf("error"); } else { 
     printf("success"); } } 

这里随便写个代码

在这里插入图片描述

这里我们就能看到return的特殊性了。

ii. exit

但是exit就不一样了,它执行后,不管在哪个函数,会直接终止进程

这里我们可以来做个实验

#include<stdlib.h> #include<stdio.h> void test() { 
     exit(0); } int main() { 
     test(); printf("123"); } 

在这里插入图片描述
这里我们能发现运行结果没有打印123
如果我们把exit换成return
肯定是能打出来123的
这就体现了return和exit的区别



iii. _exit

_exit和exit同样也有区别

别看就差了一个横杠,但是差距同样很大

这里我们用一个代码就能展现出它们的差别了。

#include<unistd.h> #include<stdlib.h> #include<stdio.h> int main() { 
     printf("123"); exit(0); } 

在这里插入图片描述

这里我们能看到结果是123

那如果我们换成_exit呢?

#include<unistd.h> #include<stdlib.h> #include<stdio.h> int main() { 
     printf("123"); _exit(0); } 

在这里插入图片描述

所以这里我们也能看出它们的区别了:

exit会按照步骤一步一步正常的退出进程(清空缓存区等)
_exit则会直接进行退出

在这里插入图片描述

2.2. 查看C语言中的对应返回值的对应出错

这里表示程序正常运行很简单,返回值直接是0就行了

#include<string.h> #include<stdio.h> int main() { 
     for(int i=0;i<200;i++) { 
     printf("%d :%s\n",i,strerror(i)); } return 0; } 

在这里插入图片描述
多的就不放出来了

2.3 使用errno

#include<stdio.h> #include<errno.h> #include<stdlib.h> #include<string.h> int main() { 
     int* i=(int*)malloc(1000*1000*1000*4); printf("error=%d %s",errno,strerror(errno)); } 

在这里插入图片描述
这里我们能直接看到他的结果

2.4 查看系统进程的返回值

这里能看到输出结果是No such file or director

因为linux内核使用C语言来写的,所以按道理应该和C一样

这里我们能看到C语言中对应的No such file or director
在这里插入图片描述
对应的返回值是2

那我们ls本质也是个进程,所以我们可以用echo $?来进行查看

是否返回值是2

在这里插入图片描述
结果正如我们想象

因为linux中有默认接口,将对应的错误码转换成对应错误
所以它会直接输出对应返回值的错误字符串

三. 进程信号(针对异常)

所以如果进程异常退出了,这个时候就不关心它的返回码了
但是要关心它为什么异常

这里我们就要知道异常的本质了

当程序异常的时候会被系统转化为信号,交给计算机硬件设备,进行处理

但是具体的信号之类的过程以后会专门出博客来讲。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109768.html

(0)
上一篇 2026-02-04 18:45
下一篇 2026-02-04 19:12

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信