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

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

  • 一. 进程结束情况
    • i. 正常终止
    • ii. 出错终止
    • iii. 异常退出
  • 二. 进程返回值(针对正常和出错)
    • 2.1. 进程的退出方式
      • i. return
      • ii. exit
      • iii. _exit
    • 2.2. 查看C语言中的对应返回值的对应出错
    • 2.3 使用errno
    • 2.4 查看系统进程的返回值
  • 三. 进程信号(针对异常)


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

一. 进程结束情况

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

i. 正常终止

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

ii. 出错终止

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

iii. 异常退出

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

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

我们知道进程正终止和出错终止程序都是正常终止了
那如何对这两个进行区分?

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

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

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

这里能清楚的看到
return表示了程序结束结果
这就是用来区分终止结果的代码了。

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

正如上面我们说return特殊性
return带来返回值后程序还能继续执行

但是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同样也有区别

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

_exit是系统中的一个调用接口
但是exit是C语言中自带的一个方法。

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

#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);
}

在这里插入图片描述

这里我们就能发现它并没有打印出123
这里就能体现出exit和_exit的区别了

这里要科普一个小知识,printf数据时,并不会直接将数据打印在屏幕上
而是会先将数据,放在缓存区中

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

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

在这里插入图片描述

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

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

但是如果是出错终止,那就有很多种的错误
想要表示出分别是哪种错误,就要用不同的返回值来表示

但是要记住每一种返回值对应的错误很难
所以在C语言中也进行了对应返回值和对应错误整合
这里我们能进行查看

#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

C语言中有errno.h,其中有一个全局变量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));
}

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

errno的值是12
正好对应了存储空间不足的这个错误。

2.4 查看系统进程的返回值

这里我们就要用到一个指令了:
echo $?查看上个程序的返回值

这里我们可以来进行实验一下
在这里插入图片描述

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

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

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

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

是否返回值是2

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

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

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

进程异常退出
这个部分我们先不细讲,后面在信号的时候会着重讲
这里就小提一下

进程异常崩溃退出
这个时候就说明程序发生了异常错误,这个时候连程序都没完整走完
所以这个时候程序的返回值就已经不重要

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang开发之------ Beego框架

1.安装go&#xff08;配置环境变量&#xff09; 2.安装gorm&#xff08;Goland编辑器举例&#xff09;&#xff1a; go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 3.初始化项目&#xff08;首先需要在工作目录新建bin文件夹&#xff0c;pkg文件…

字符串相似度匹配算法_Jaccard算法优化

package day0321.day0330;import java.util.HashSet; import java.util.Set;public class JaccardSimilarity {public static double calculateJaccardSimilarity(String str1, String[] strArray) {// 将字符串视为字符的集合Set<Character> set1 new HashSet<>(…

Ubuntu 22.04 LTS 上 安装 Redis

Ubuntu 22.04 LTS 上的Redis安装指南 Redis是一种开源的内存数据存储&#xff0c;可以用作数据库、缓存和消息代理等。本文将会介绍两种不同的安装方式&#xff0c;包括从源代码编译安装以及通过apt包管理器安装。 一、从源代码编译安装Redis 首先&#xff0c;我们需要下载最…

万宾科技水环境综合治理监测系统的融合与应用

随着社会经济的快速发展&#xff0c;我国的水环境污染问题日益凸显&#xff0c;这不仅对生态环境造成了严重破坏&#xff0c;也严重威胁到人民群众的健康和生活质量。为了解决这一问题&#xff0c;城市生命线与水环境综合治理监测系统应运而生&#xff0c;二者的结合将为水环境…

C++修改类内存对齐大小

#pragma pack(push, 1) 告诉编译器以1字节对齐方式&#xff08;即没有填充字节&#xff09;存储数据结构。这意味着每个数据成员都紧挨着前一个数据成员&#xff0c;没有填充字节。 #pragma pack(pop) 则是对应的恢复编译器默认的对齐方式。

Maven下载与安装教程

一、下载 Maven 进入 Maven 官网&#xff1a;maven.apache.org/download.cgi 选择 .zip 文件下载&#xff0c;最新版本是 3.9.5 二、安装 Maven 将 .zip 文件解压到没有中文没有空格的路径下。例如下图&#xff0c;在创建一个repository的空文件夹在他的下面&#xff0c;用于…

科研学习|论文解读——Task complexity and difficulty in music information retrieval

摘要&#xff1a; 关于音乐信息检索&#xff08;MIR&#xff09;中任务复杂度和任务难度的研究很少&#xff0c;而文本检索领域的许多研究发现任务复杂度和任务难度对用户效率有显着影响。本研究旨在通过探索 i) 任务复杂度和任务难度之间的关系&#xff1b; ii) 影响任务难度的…

Oracle E-Business Suite软件 任意文件上传漏洞(CVE-2022-21587)

0x01 产品简介 Oracle E-Business Suite&#xff08;电子商务套件&#xff09;是美国甲骨文&#xff08;Oracle&#xff09;公司的一套全面集成式的全球业务管理软件。该软件提供了客户关系管理、服务管理、财务管理等功能。 0x02 漏洞概述 Oracle E-Business Suite 的 Oracle…

基于单片机设计的激光测距仪(采用XKC-Kl200模块)

一、前言 随着科技的不断进步和应用需求的增加&#xff0c;测距仪成为了许多领域必备的工具之一。传统的测距仪价格昂贵、体积庞大&#xff0c;使用起来不够方便。本项目采用STC89C52单片机作为主控芯片&#xff0c;结合XKC-KL200激光测距模块和LCD1602显示器&#xff0c;实现…

Java链式编程、什么是链式编程、链式编程怎么调用,链式编程的使用形式,Builder模式实现链式编程(保姆级教程)

Java链式编程 链式编程的特点是可以通过一个方法调用多个方法&#xff0c;将多个方法调用链接起来&#xff0c;形成一条“链式”&#xff0c;从而提高代码的可读性。 在链式编程中&#xff0c;每个方法的返回类型 应该是调用该方法的对象类型&#xff0c;这样才能够在调用完一…

EXCEL一对多关系将结果合并到一个单元格

EXCEL一对多关联结果&#xff0c;合并到1个单元格&#xff0c;变成一对一 需求说明 举例说明 假设给出国家省和国家市的对应表&#xff0c;因为每个省都有很多个城市&#xff08;如图1&#xff0c;截取了部分&#xff09;&#xff0c;属于一对多的情况&#xff1b; 如何将同…

【数据仓库】-- 数据库设计的三个范式

目录 1、什么是数据库设计的范式? 2、数据库范式详解 2.1 1NF 第

docker基础操作及部署springboot项目流程

一、安装docker及基础命令 1.centos系统安装https://www.runoob.com/docker/ubuntu-docker-install.html curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.启动docker服务 systemctl start docker3.查看docker服务是否启动成功 docker info4.设置开机…

假设检验(二)(正态总体参数的假设检验)

文章目录 一个正态总体的情形总体均值 μ \mu μ 的检验总体方差 σ 2 \sigma^2 σ2 的检验—— χ 2 \chi^2 χ2 检验 两个正态总体的情形两总体均值差的检验—— t t t 检验两总体方差比的检验—— F F F 检验 参考文献 在作假设检验时&#xff0c;若检验统计量服从正态分布…

解决:ModuleNotFoundError: No module named ‘qt_material‘

解决&#xff1a;ModuleNotFoundError: No module named ‘qt_material’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named qt_material背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&#xff0c;报错&…

Alignment of HMM, CTC and RNN-T,对齐方式详解——语音信号处理学习(三)(选修二)

参考文献&#xff1a; Speech Recognition (option) - Alignment of HMM, CTC and RNN-T哔哩哔哩bilibili 2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 Alignment - 7 - 知乎 (zhihu.com) 本次省略所有引用论文 目录 一、E2E 模型和 CTC、RNN-T 的区别 E2E 模型的思路 C…

设计模式之Template模式(模板方法)

Template模式(模板方法) 自己的理解就是 做多件事或者多个工程 大部分步骤一样的话 就只需要将不同的那一步单独拿出来设定好 在做这个工程时 先确定好框架 并把那个单独步骤拿来就可以了 动机 在软件构建过程中&#xff0c;对于某一项任务&#xff0c;它常常有稳定的整体…

【Java】5. 标识符

5. 标识符 5.1 硬性要求 ​ 必须要这么做&#xff0c;否则代码会报错。 必须由数字、字母、下划线_、美元符号$组成。数字不能开头不能是关键字区分大小写。 5.2 软件建议 ​ 如果不这么做&#xff0c;代码不会报错&#xff0c;但是会让代码显得比较low。 5.2.1 小驼峰命…

基于containerd容器运行时,kubeadmin部署k8s 1.28集群

一.主机准备 1.1主机配置与操作系统说明 centos7u9 1.2主机硬件配置说明 序号主机名ip地址CPU内存硬盘1k8s-master1192.168.1.2002C2G100G2k8s-worker1192.168.1.2012C2G100G3k8s-worker2192.168.1.2022C2G100G 1.3主机配置 1.3.1主机名配置 hostnamectl set-hostname k…

Docker port 命令

docker port&#xff1a;列出指定的容器的端口映射&#xff0c;或者查找将PRIVATE_PORT NAT到面向公众的端口。 语法 docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]实例 查看容器mymysql的端口映射情况&#xff1a; docker port mymysql##效果如下&#xff1a; …