进程终止(错误码与终止信号)

本文讲述了进程执行结果的三种情况:正常、不正确和未执行,通过错误码和终止信号告知父进程。还介绍了进程退出的三种方式:return、_exit和exit,以及它们的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、进程执行的结果(重要)

1.进程正常执行,结果正确

2.进程正常执行,结果不正确(例如,文件打开失败等,没有继续执行后续代码,直接return)

3.进程没有正常执行(进程中断执行,直接报错,没有执行return语句 比如代码中含有 1/0 错误算法)

二、父进程如何知道子进程的执行结果

首先,我们都知道c语言中错误码的存在strerror(errno),我们执行下面代码,就可以获得各类错误码所代表的含义

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

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

(部分错误码展示)

思考:为什么main函数return的是0?

答案:0代表No error,也就是说main进程向他的父进程说明我的进程正常执行,结果正确

(1).子进程正常执行,结果正确

我们让进程退出,并告诉父进程 子进程错误码是0:No error 没有错误(我这里不直接说“return 0即可” 是因为进程退出不只return一种方式)

(2).子进程正常执行,结果不正确

我们让进程退出,并告诉父进程 子进程的对应错误码,比如当子进程打开文件失败 我们可以返回3:No such file or directory告诉父进程:子进程成功运行了,但是子进程没有完成他应完成的任务,返回的结果不正确

(3).进程没有正常执行

64种进程没有执行的原因:称为 进程终止信号

问题:为什么不从0开始标记呢?

答案:我们先思考这样一个逻辑:进程执行成功就意味着进程没有执行失败(doge.jpg),人话说就是有了错误码就不可能有1-64的各类终止信号,因此我们将此时的终止信号设置为0,表明进程正常执行了

总结:父进程通过两个数字知道子进程的执行结果:

通过终止信号知道进程有没有正常执行

通过错误码知道进程的执行结果

三、进程退出方式

1.return

喜闻乐见的正常退出 linux中可用 echo $? 查看上一次进程退出情况

2._exit

系统层面的函数接口,直接暴力退出一个进程,无论该进程正在做什么

3.exit

封装了_exit的函数接口,在调用_exit之前,还做了其他工作: 1. 执行用户通过 atexit或on_exit定义的清理函数。 2. 关闭所有打开的流,所有的缓存数据均被写入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值