《Linux从练气到飞升》No.18 进程终止

news2024/11/24 8:35:28

  

🕺作者: 主页

我的专栏
C语言从0到1
探秘C++
数据结构从0到1
探秘Linux
菜鸟刷题集

😘欢迎关注:👍点赞🙌收藏✍️留言

🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!

前言

前面我们讲述了使用fork函数进行进程的创建,既然有创建就有终止,那么本篇将向大家讲述进程终止的相关知识~

进程终止与操作系统

进程终止时操作系统做了什么呢?当然是要释放进程申请的相关内核数据结构和对应的数据和代码。本质就是释放系统资源。

进程退出场景

进程退出有三种场景如下:

  • 代码运行完毕,结果正确
  • 代码运行完毕,结果不正确
  • 代码异常终止

这里我们要展开讲一下。在我们使用c语言进行编程的时候,我们会注意到main函数的返回值,总是return 0,为什么总是0呢?因为他是进程的退出码。那他一定得是0吗?并不是的。他返回这个数字的意义在于返回给你上一级进程,用来评判该进程执行结果用的。如果非零值就说明是,程序是有错误的,非零值有无数个,不同的非零值就可以标识不同的错误原因,所以它的作用就是在我们的程序运行结束之后,结果不正确,可以方便我们定位错误的原因细节。

举个例子:

测试代码:

#include <stdio.h>
#include <unistd.h>

int main()
{
    int a[3]={0};
    printf("%d\n",a[1])//注意看,这里少了个 ;
    return 0;
}

 这里还要介绍一个指令,它可以查看上一个进程运行错误的原因

echo $?

 返回2

是什么意思呢?别急!

我们先来查看一下这些“非零值”都代表着什么?

#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
    for(int number = 0; number < 150; number++)
    {
        printf("%d: %s\n", number, strerror(number));//将数字代表的错误原因展示出来
    } 

    return 0;
}

查看结果:

进程常见退出方法

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

  • 1. 从main返回
  • 2. 调用exit
  • 3. _exit

异常退出:

  • ctrl + c,信号终止

_exit函数

#include <unistd.h>
void _exit(int status);
参数:status 定义了进程的终止状态,父进程通过wait来获取该值

 说明:虽然status是int,但是仅有低8位可以被父进程所用。所以_exit(-1)时,在终端执行$?发现返回值是255。

exit函数

#include <unistd.h>
void exit(int status);

 exit最后也会调用_exit, 但在调用_exit之前,还做了其他工作:

1. 执行用户通过 atexit或on_exit定义的清理函数。
2. 关闭所有打开的流,所有的缓存数据均被写入
3. 调用_exit

 

 测试一下:

exit函数

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

运行:

 

 _exit函数

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

 运行:

 因为我们设置的字符串后面没有“\n”,也就是说它会待在缓冲区中,然后我们会发现_exit函数会直接结束,而exit函数则是先把缓存区内的数据冲刷出来才结束,其实exit是库函数,而_exit是系统接口,exit函数最后会调用操作系统的_exit函数。

这里给大家留下一个问题,printf——\n数据保存在缓冲区中的,请问缓冲区在哪里?谁维护?但是我们知道它一定不在操作系统内部,如果是操作系统维护的,缓冲区_exit就一定能够刷出来!今天我只能告诉你是C语言标准库给我们维护的。懂得的小伙伴可以在评论区打出一起交流~

return退出

return是一种更常见的退出进程方法。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做 exit的参数。

后记

本篇我们主要讲述了进程的退出场景,进程的终止,正常情况下它有三种退出的方式,异常情况可以使用ctrl+c的方式终止~

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

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

相关文章

前端 js实现 选中数据 动态 添加在表格中

如下图展示&#xff0c;表格上方有属性内容&#xff0c;下拉选中后&#xff0c;根据选中的内容&#xff0c;添加在下方的表格中。 实现方式&#xff0c;&#xff08;要和后端约定&#xff0c;因为这些动态添加的字段都是后端返回的&#xff0c;后端自己会做处理&#xff0c…

C# textBox 右键菜单 contextMenuStrip

需求&#xff1a; 想在上图空白处可以右键弹出菜单&#xff0c;该怎么做呢&#xff1f; 1.首先&#xff0c;拖出一个 ContextMenuStrip。 随便放哪里都行&#xff0c;如下: 2.在textBox里关联这个“右键控件”即可&#xff0c;如下&#xff1a; 最终效果如下&#xff1a; 以上…

世微AP9234 升压型DC/DC LED恒流驱动

描述 AP9234是一款由基准电压源、振荡电路、误差放大电路、相位补偿电路、电流限制电路等构成的CMOS升压型DC/DC LED驱动。由于内置了低导通电阻的增强型N沟道功率MOSFET&#xff0c;因此适用于需要高效率、高输出电流的应用电路。另外&#xff0c;可通过在VSENSE端子连接电流…

述途路人团·百分之一的困

我开发的第2款Steam上的小游戏&#xff1a; 《述途路人团百分之一的困》&#xff08;英文名称&#xff1a;《As Talk As Walk Wayfarer Team – One Percent Sleepy》&#xff09; https://store.steampowered.com/app/2465530/_/ 电子邮件&#xff1a;atawwt_onepes163.com

关于cross entropy这个概念

第一步&#xff0c;现在果断上chatGPT去查准确概念&#xff1a; 也就是说&#xff0c;你有一个真实的概率分布P, 同时&#xff0c;你通过训练得到的一个模型&#xff0c;这个模型对于这个数据的输出的概率分布是Q&#xff0c; 而H(P&#xff0c;Q)就是用来描述这个2个概率分布…

实现不同局域网文件共享的解决方案:使用Python自带HTTP服务和端口映射

文章目录 1. 前言2. 本地文件服务器搭建2.1 python的安装和设置2.2 cpolar的安装和注册 3. 本地文件服务器的发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用&#xff0c;不仅在商业和办公场景有广泛的应用…

成都爱尔李晓峰提醒发生麦粒肿要怎么“处理”

麦粒肿在临床上称为脸腺炎 (hordeolum )&#xff0c;就是生活中的“针眼”。 是一种眼脸腺体的急性化脓性炎症病变&#xff0c;具有急性炎症常表现出的红、肿、热、痛等典型症状&#xff0c;病变处有硬结&#xff0c;硬结破溃后排出脓液&#xff0c;多可自愈。 哪些情况易发麦粒…

linux操作系统的权限的深入学习

1.Linux权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户…

如何下载免费文献

文章目录 一、支付宝参考 一、支付宝 白嫖知网的入口之一&#xff0c;就藏在你天天用的支付宝里。 首先&#xff0c;在支付宝上办理读者证&#xff1a; 搜索“浙江图书馆”&#xff0c;进入左下方功能栏里的“服务大厅”。 点击“新用户注册”填信息 办理完毕后&#xf…

Python 包管理(pip、conda)基本使用指南

Python 包管理 概述 介绍 Python 有丰富的开源的第三方库和包&#xff0c;可以帮助完成各种任务&#xff0c;扩展 Python 的功能&#xff0c;例如 NumPy 用于科学计算&#xff0c;Pandas 用于数据处理&#xff0c;Matplotlib 用于绘图等。在开始编写 Pytlhon 程序之前&#…

山西电力市场日前价格预测【2023-08-29】

日前价格预测 预测明日&#xff08;2023-08-29&#xff09;山西电力市场全天平均日前电价为321.48元/MWh。其中&#xff0c;最高日前电价为372.80元/MWh&#xff0c;预计出现在19: 30。最低日前电价为272.85元/MWh&#xff0c;预计出现在12: 30。 价差方向预测 1&#xff1a; 实…

Web Components详解-Custom Elements

目录 引言 演变过程 概述 使用方式 创建标签 定义标签 使用标签 获取标签 异步定义标签 升级标签 完整案例 结语 相关代码 参考文章 引言 随着项目体量的增大&#xff0c;组件化和模块化的优势也愈发明显了&#xff0c;构建可重复使用、独立、可互操作的组件变得…

《自动驾驶与机器人中的SLAM技术》之GNSS相关基础知识总结

简介 本篇基于对《自动驾驶与机器人中的SLAM技术》中的GNSS定位相关基础知识进行总结用于备忘 知识点整理 GNSS(全球卫星导航系统)定位原理 GNSS 通过测量自身与地球周围各卫星的距离来确定自身的位置 , 而与卫星的距离主要是通过测量时间间隔来确定的 GNSS与GPS的关系 GPS(…

FilterListener

Filter&Listener 1 Filter1.1 Filter概述1.2 Filter快速入门1.2.1 开发步骤1.2.2 代码演示 1.3 Filter执行流程1.4 Filter拦截路径配置1.5 过滤器链1.5.1 概述1.5.2 代码演示 1.5.3 问题 1.6 案例1.6.1 需求1.6.2 分析1.6.3 代码实现1.6.3.1 创建Filter1.6.3.2 编写逻辑代码…

HHDESK一键改密功能

HHDESK新增实用功能——使用SSH连接&#xff0c;对服务器/端口进行密码修改。 1 测试 首页点击资源管理——客户端&#xff0c;选择需要修改的连接&#xff1b; 可以先对服务器及端口进行测试&#xff0c;看是否畅通&#xff1b; 右键——测试——ping&#xff1b; 以及右…

box_loss,obj_loss,cls_loss,Size的含义,以及他们数据增长与降低时,是好还是坏

box_loss,obj_loss,cls_loss,Size的含义&#xff0c;以及他们数据增长与降低时&#xff0c;是好还是坏

特斯拉启动墨西哥建厂计划,引发台厂竞逐 | 百能云芯

特斯拉&#xff08;Tesla&#xff09;在墨西哥新工厂计划备受瞩目&#xff0c;据外媒报道&#xff0c;墨西哥的超级工厂似乎正在迈出实质性的步伐。包括鸿海集团、广达&#xff08;Foxconn&#xff09;、和大在墨西哥和美墨边境都计划扩大电动车零配件生产基地。 市场对特斯拉在…

无法加载文件 D:\python-csv\venv\Scripts\Activate.ps1,因为在此系统上禁止运行脚本。

解决办法&#xff1a; 不可以直接删除该文件。该文件是 Python 虚拟环境的激活脚本&#xff0c;用于激活虚拟环境并设置环境变量。如果删除该文件&#xff0c;将无法激活虚拟环境&#xff0c;也无法使用虚拟环境中的 Python 解释器和库。 如果您无法加载该文件&#xff0c;可能…

【校招VIP】java语言考点之多线程NIO

考点介绍 多线程&NIO考点是校招面试中的常制点之一。 Java NIO是new IO的简称&#xff0c;是一种可以替代Java 10的一套新的IO机制。它提供了一套不同于Java标准1O的操作机制&#xff0c;严格来说&#xff0c;NIO与并发并无直接关系&#xff0c;但是使用NIO技术可以大大提高…

2023年夏季《移动软件开发》实验报告3

2023年夏季《移动软件开发》实验报告 本实验属于哪门课程&#xff1f;中国海洋大学23夏《移动软件开发》实验名称&#xff1f;实验3&#xff1a;口述校史博客地址&#xff1f;XXXXXXXGithub仓库地址&#xff1f;XXXXXXX &#xff08;备注&#xff1a;将实验报告发布在博客、代…