Linux进程控制——进程终止

文章目录

    • 进程终止
      • 从main函数return返回
      • exit退出
      • _exit和exit的区别
      • 程序异常终止
      • perror与errno

进程终止

我们之前在命令行界面要终止一个进程时直接ctrl+c来干掉一个进程是比较暴力的做法

实际上我们通常会使用一些函数调用接口或者系统调用接口来控制进程的退出

就像我们完成一个任务一样,有完成和未完成两种结果,完成也可以分为完美完成和不完美完成

对应下来就是三种结果,代码执行完成、结果正确;代码执行完成、结果不正确;代码异常终止

前两个都属于是程序正常退出,一般有三种常见的方法,main函数return返回、调用exit终止进程、调用_exit终止进程

而第三种则是异常退出,一般情况下异常往往是与信号相关的内容,我们之后再做介绍,这里我们只考虑ctrl+c终止进程

从main函数return返回

在一开始学习C/C++时,在main函数结尾都会写一个return 0,当时的解释就是表示程序正常结束

那么也就说明有异常结束的情况了,首先要说明的一些情况是这样的

一个进程中只有一个main函数,也有的书中将函数称之为子程序,这是因为函数也可以return值,那么其实就可以说明,非main函数return时,表示这个函数完毕,而main函数执行到return时,说明这个进程执行完毕

程序正常执行完毕且结果正确,返回0

程序正常执行完毕但结果不正确,返回非0

但是非0的情况那么多,他们分别代表什么呢

这里就有一个函数,strerror,他可以将错误码转换成对应的字符串信息,这样我们就可以打印来查看了

image.png

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

image.png

虽然我们循环写到了200,但是他这个错误类型只有133个,之后就显示未知错误

我们也可以使用echo $?来查看退出码

例如

image.png

这里可以看到是完全对应的

exit退出

image.png

函数调用的参数其实就是上面的错误码,和main函数中的return是一个意思

但是也有不同的地方,return只有在main函数中才表示进程退出,而exit在程序的任何地方都表示进程退出并且返回错误码,之后的内容也就不会继续执行了

_exit和exit的区别

_exit的头文件是unistd.h,和exit都是终止进程,并且他的参数也是表示错误码

这两个函数有什么区别,我们可以写一个代码来看看

image.png

第一个退出打印了文字,而第二个没有

我们需要联系以前所学的知识,因为使用printf打印数据如果不用回车换行的话,数据就会被存到缓冲区了,而exit打印了就说明exit帮我们刷新了缓冲区的内容,而_exit并没有

exit是c语言提供的库函数,_exit是由操作系统提供的系统调用,就说明了,缓冲区其实不是由操作系统来维护的,而是由实现他的c语言标准来维护的

程序异常终止

异常终止的情况主要是由信号来控制的,此时我们再讨论程序的退出码其实就没有意义了,因为程序根本就没有正常执行下去,例如数组越界,ctrl+c干掉程序都是一样的

perror与errno

我们之前在学习C/C++的时候,有用过一个全局变量是errno

这里面存的是最近的一个错误码,例如当fopen函数打开文件失败,errno就会被赋值

perror和errno经常搭配使用,他会输出errno错误码对应的错误信息,并且perror的参数代表的是那个地方有问题,这是由用户来决定的

例如

FILE& fp = fopen("text.txt","r");
if(fp==NULL)
{perror("fopen");exit(1);
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Redis使用场景-热点数据缓存

什么是缓存&#xff1f; 为了把一些经常访问的数据放入缓存中已减少对数据库的访问&#xff0c;从而减少数据库的压力&#xff0c;提高程序的性能。【内存中存储】-效率快 缓存的原理 什么样的数据适合放入缓存中&#xff1f; 1.查询频率高且修改频率低 2.数据安全性低 哪些组件…

3.k8s:服务发布:service,ingress;配置管理:configMap,secret,热更新;持久化存储:volumes,nfs,pv,pvc

目录​​​​​​​ 一、服务发布 1.service &#xff08;1&#xff09;service和pod之间的关系 &#xff08;2&#xff09; service内部服务创建访问 &#xff08;3&#xff09;service访问外部服务 &#xff08;4&#xff09;基于域名访问外部 &#xff08;5&#xff…

Docker快速搭建WordPress博客系统网站

WordPress 是一款广泛使用的开源内容管理系统(CMS),用于创建和管理网站和博客。 主要功能: 易于使用的界面:WordPress 提供了一个直观的后台管理界面,使用户能够轻松创建、编辑和管理网站内容。 主题和模板:WordPress 提供了各种主题和模板,可根据网站需求进行选择和自…

Volatile vs Atomic

Volatile vs Atomic 1、Volatile 变量2、Atomic 变量 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; volatile和atomic这两个关键字经常会出现在我们的视线中。它们虽然看似相似&#xff0c;实则功能大不相同。 1、Volatile 变量 作用&…

uni-app框架+vue3 实现上拉加载和下拉刷新功能

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是码喽的自我修养&#xff01;之前给大家分享了【vue2uniapp实现上拉加载和下拉刷新功能】uni-app框架vue2 实现上拉加载和下拉刷新功能https://blog.csdn.net/2301_78542842/article/details/140626170?spm1001.2014.30…

Git 基础 GitHub【学习笔记】

一、Git 优势 大部分操作在本地完成&#xff0c;不需要联网完整性保证尽可能添加数据而不是删除或修改数据分支操作非常快捷流畅与 Linux 命令全面兼容 二、Git 程序安装 https://git-scm.com 三、Git 结构 #mermaid-svg-9Go6R1leWXWrDCqn {font-family:"trebuchet ms&quo…

全球耐辐射电机驱动器市场规模预测:未来六年年复合增长率CAGR为5.1%

据恒州诚思研究&#xff0c;2023年全球耐辐射电机驱动器市场规模大约为20亿元&#xff0c;预计未来六年年复合增长率CAGR为5.1%&#xff0c;到2030年市场规模将接近28亿元。这一增长反映了耐辐射电机驱动器在全球市场中的重要性及其在未来发展中的潜在机会。随着技术的进一步发…

探索 Electron:构建用户友好的登录页面流程

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十九章 等待队列

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

远程项目调试-informer2020

informer2020 Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting(原文&#xff09;Informer 是一个基于Transformer的模型&#xff0c;是为了应对长依赖关系而开发的。本文的主要主题是序列预测。序列预测可以在任何具有不断变化的数据的地方…

【STM32物联网】基于STM32+ESP8266+手机APP设计的智能密码锁源码原理图APP文档

实物图 1.摘要 设计了一种基于单片机的智能密码锁系统,提供了一种安全度高、智能化 便捷的门锁解决方案。系统由多个关键模块组成,包括 STM32 主控芯片、 RC522 射频 卡模块、指纹采集模块、矩阵按键、LCD 显示屏、 WiFi 模块和继电器等。这些模块发挥 着重要的功…

回溯的undo choice

重写N皇后和分割回文串,发现会想不明白path.remove(path.size() - 1)是在if里面还是if外面&#xff0c;问了GPT感觉很清楚 题目 N皇后 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList<>();pu…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十八章 Platform 设备驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表&#xff0c;是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷&#xff0c;可以在短时间内快速收集反馈信息。具体效果如下所示&#xff1a; 2、思路 此调查问卷采用服务器客户端的方式进行设计&#xff0c;服…

【0300】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2 - 1)

1. 前言 在【0298】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2)一文中讲解过Postgres内核在通过RangeVar打开一个目标关系表时,在函数parserOpenTable()中,会注册parser错误位置报告回调函数。 同时也说明了这个注册过程的使用模式。 本文将继续讲解该使用模…

【Linux】-----工具篇(编译器gcc/g++,调试器gdb)

目录 一、gcc/g 简单认识 程序的翻译过程认识gcc 预处理(宏替换) 编译 汇编 链接 宏观认识 如何理解&#xff08;核心&#xff09; 什么是链接&#xff1f; 链接的分类 二、gdb 基本的认识 基本操作及指令 安装gdb 启动gdb ​编辑 显示源代码(list) 运行程序…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

动视发布长篇“论文”试图证明:没有SBMM 只有高手受益

SBMM——基于技能的比赛匹配系统&#xff0c;一直是《使命召唤》和广大 FPS 玩家所诟病的东西&#xff0c;但是《使命召唤》抱怨的玩家最多&#xff0c;因为似乎它所使用的匹配系统是让技术较好的玩家体验最糟糕的。 动视在此前一改对匹配系统避而不谈的态度后&#xff0c;日前…

鸿蒙开发——axios封装请求、拦截器

描述&#xff1a;接口用的是PHP&#xff0c;框架TP5 源码地址 链接&#xff1a;https://pan.quark.cn/s/a610610ca406 提取码&#xff1a;rbYX 请求登录 HttpUtil HttpApi 使用方法

Hadoop单机版环境搭建

一 . 案例信息 Hadoop 的安装部署的模式一共有三种&#xff1a; 本地模式&#xff0c;默认的模式&#xff0c;无需运行任何守护进程&#xff08; daemon &#xff09;&#xff0c;所有程序都在单个 JVM 上执行。由 于在本机模式下测试和调试 MapReduce 程序较为方便&#x…