Linux详解:进程终止、错误码

文章目录

  • 进程终止
    • main函数返回值
    • 函数错误码
    • 进程退出场景
    • 进程常见退出方式

进程终止

main函数返回值

main函数的返回值,叫做进程的退出码。该退出码表示整个进程的执行结果。
  • 0:表示成功
  • 非0:表示失败

成功不需要理由,失败需要原因。
非0,不同的数字,表示不同的失败原因。

  • echo $?
    查看最近一次,进程退出,返回的退出码。

退出码
每个退出码都可以转化成为相对应的退出错误描述。

  • 使用语言和系统自带的方法,进行转化
  • 自定义

查看系统中提供的错误(退出)码描述
strerror():获取指向错误信息字符串的指针

#include<stdio.h>
#include<string.h>

int main()
{
	for(int i = 0;i<200;i++)
	{
		printf("%d: %s\n",i,strerror(i));
	}
	return 0;
}

自定义退出码描述错误
可以自定义退出码的代表含义。

enum{
	success=0;
	open_err,
	malloc_err
};

const char* error(int code)
{
	switch(code)
	{
		case success:
			return "success";
		case open_err:
			return "file open error";
		case malloc_err:
			return "malloc error";
		default:
			return "unkonw error";
	}
}

其他函数仅仅表示函数调用完毕。

函数错误码

函数再执行出错的时候也存在一个退出码,通常称之为错误码。

  • #include<errno.h>
  • errno() :获取错误编号
int main()
{
	File* fp = fopen("./log.txt","r");
	printf("%d:%s\n",errno,strerror(errno));
	return 0;
}

进程退出场景

  • 进程代码运行完毕,结果正确

  • 进程代码运行完毕,结果不正确

  • 进程代码没有执行完,进程异常终止

    • 进程出现了异常,就是进程收到了异常信号,每个信号都有不同的编号,不同的信号编号表明不同的异常原因。
  • 任何进程最终的执行情况,都可以使用两个数字表明具体执行的情况
    信号编号 进程退出码

信号编号进程退出码表示状态
00没有异常,结果正确
!00出现异常,退出码无意义
0!0没有异常,结果错误
!0!0出现异常,退出码无意义

进程常见退出方式

  • echo $?
    查看最近一次,进程退出,返回的退出码。

正常终止
可以通过echo $?查看进程退出码

  • 从main返回
  • 调用exit()
  • _exit

exit():正常的进程终止

#include<stdlib.h>
void exit(int status);
exit可以用来终止进程,exit的参数就是退出码。在进程代码中,任意位置调用exit,都表示进程退出

**_exit():进程终止

#include<unistd.h>
void _exit(int status);
系统调用,作用和exit相同

exit和_exit的区别

  • exit:会刷新缓冲区
  • _exit:不支持刷新缓冲区

异常退出

  • ctrl+c,信号终止

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ios 打印选择纸张

问题描述&#xff1a; 手机App开发中的打印功能&#xff0c;在android中可以选择打印的纸张是A4 A5 等&#xff0c;但是在ios系统中不能选择纸张&#xff0c;一般情况下会只有一个纸类型。 原因解释&#xff1a; 因为在打印机的配置页中可以设置打印机的当前纸张大小&#xff…

sql今天学习总结

排序order by&#xff08;默认升序&#xff09; order by id desc(降序排序&#xff09; order by id,number&#xff08;先按id排再按name排序&#xff09; in,not in and or 通配符 where name like "Aa%";选取所有以Aa开头的名字 like "%r" 以r结…

从关键新闻和最新技术看AI行业发展(2024.2.12-2.25第十七期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&#x1f4aa; 欢迎大家关注Rocky的公众号&…

C语言-atoi和atof函数的使用

人生应该树立目标&#xff0c;否则你的精力会白白浪费。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;知识回顾 &#x1f34b;知识点一&#xff1a;atoi函数的使用和实现 • &#x1f330;1.函数介绍 • &#x1f330;2.代码演示 • &#x1f330;3.atoi函数的…

LeetCode78:子集

题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集 &#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 代码 class Solution { public:vector<vector<int>> res;vector<…

DAM与开源AI名片B2B2C商城系统深度融合,引领企业数字化升级

在数字化浪潮的推动下&#xff0c;内容科技日益成为企业营销战略中的核心力量。DAM&#xff08;数字资产管理&#xff09;以其卓越的内容管理能力&#xff0c;引领企业进入数字资产高效管理与利用的新时代。与此同时&#xff0c;开源AI名片B2B2C商城系统也以其强大的功能和创新…

【Linux】进程的控制①之进程创建与进程退出

一 、进程的创建 1、fork函数 fork函数功能&#xff1a;从已经存在的进程中创建一个新进程。新进程为子进程&#xff0c;原进程为父进程。 fork函数创建进程过后&#xff0c;父子进程代码和数据是共享的。在前面也讲过。 2.函数的返回值 如果进程创建成功&#xff0c;给父进…

PCB设计:差分线

1、差分线的定义 差分线是两条平行的、等长的走线,传输相位差180度的同一个信号,是一根传输“+信号”,一根传输“-信号”。两个信号相减得到2倍强度的有用信号。而两根信号线上的干扰信号相减之后也就没了。 2、差分线的优势 差分信号和普通的单端信号走线相比,最明显的优…

ftp: connect :连接被拒绝(win10)

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用命令测试显示&#xff1a;“FTP拒绝连接” 二、原因分析 第一时间查看ftp服务启动了没哟&#xff0c;相关服务有2个&#xff0c;一个是【Microsoft FTP Service】一个是【IIS 管理服务】&#xf…

为什么堆排序的时间复杂度是O(N*logN)?

目录 前言&#xff1a; 堆排序&#xff08;以排升序为例&#xff09; 步骤&#xff08;用大根堆&#xff0c;倒这排&#xff0c;排升序&#xff09;&#xff1a; 1.先把要排列的数组建立成大根堆 2.堆顶元素&#xff08;82&#xff09;和最后一个元素交换&#xff08;2&…

【详细讲解CentOS常用的命令】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

SpringMVC进阶(过滤器解决中文乱码,处理json以及文件上传下载)

文章目录 1.中文乱码处理1.引出问题1.恢复原来取消掉的属性绑定2.启动服务器&#xff0c;引出问题 2.自定义中文乱码过滤器1.MyCharacterFilter.java2.web.xml配置过滤器&#xff08;这个解决乱码的过滤器放到最前面&#xff09;3.结果展示 3.使用Spring过滤器处理&#xff08;…

外面收费999元的虚拟小众产品,0门槛,单号100-300元

近日&#xff0c;我抽出时间参加了一些线下聚会&#xff0c;与互联网行业的朋友们进行了面对面的交流。有时候&#xff0c;独自努力不如与他人分享想法&#xff0c;因为别人的建议可能会让你豁然开朗&#xff0c;解决遇到的难题。在互联网行业中&#xff0c;交流和沟通至关重要…

【WinForm】怎样以管理员身份运行安装程序

当开发的程序需要安装时&#xff0c;有时默认安装会遇到访问被拒绝的问题。为了解决这个问题&#xff0c;需要以管理员身份运行程序。 文章目录 应用程序UAC清单管理员身份 安全调试ClickOne 应用程序 打开项目属性,找到应用程序下的清单, 设置好如下图 UAC清单 再找到项目…

python 调试 c++源码

1. gdb常用调试命令概览和说明 2. 编译c库设置Debug模式 cmake设置debug 在CMake中设置debug模式通常意味着启用调试信息和优化。以下是一个简单的CMakeLists.txt文件示例&#xff0c;展示了如何设置项目以便在Debug模式下构建&#xff1a; cmake_minimum_required(VERSION 3…

深度学习| 注意力机制

注意力机制 为什么需要注意力机制Seq2Seq问题Transfomer Attention注意力机制分类软硬注意力注意力域 为什么需要注意力机制 这个可以从NLP的Seq2Seq问题来慢慢理解。 Seq2Seq问题 Seq2Seq&#xff08;Sequence to Sequence&#xff09;&#xff1a;早期很多模型中&#xff…

Linux逻辑方式合并物理磁盘

在日常生活中&#xff0c;我们总是遇到一个文件太大&#xff0c;以至于我们的两个磁盘都装不下&#xff0c;这时我们就需要将两块物理磁盘逻辑化的连接在一起&#xff0c;把物理磁盘使用逻辑化的方法合并在一起&#xff0c;形成卷组&#xff0c;使得磁盘空间可以公用&#xff1…

Leetcode—1672. 最富有客户的资产总量【简单】

2024每日刷题&#xff08;120&#xff09; Leetcode—1672. 最富有客户的资产总量 实现代码 class Solution { public:int maximumWealth(vector<vector<int>>& accounts) {int ans 0;for(vector<vector<int>>::iterator it accounts.begin();…

西门子PLC常见疑难解答在这都能找到(含PLC无线通讯实例)

问&#xff1a;在WINCC中可以创建多少个消息类型&#xff1f; 答&#xff1a;WINCC中最多可以创建16个消息类型。 问&#xff1a;博途WINCC与经典版WINCC兼容嘛&#xff1f; 答&#xff1a;经典wincc和博图wincc Professional版本都不兼容 不能安装到一起的哦&#xff01; …

探讨mfc100u.dll丢失的解决方法,修复mfc100u.dll有效方法解析

mfc100u.dll丢失是一个比较常见的情况&#xff0c;由于你电脑的各种操作&#xff0c;是有可能引起dll文件的缺失的&#xff0c;而mfc100u.dll就是其中的一个重要的dll文件&#xff0c;它的确实严重的话是会导致程序打不开&#xff0c;系统错误的。今天我们就来给大家科普一下mf…
最新文章