当前位置: 首页 > news >正文

Linux进程终止

在这里插入图片描述

文章目录

    • 进程退出场景
    • 进程退出码
    • strerror
    • errno
    • 浅谈进程异常
    • exit && _exit

进程退出场景

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

进程退出码

我们写的C/C++的代码,main函数每次都需要返回0,而这个return 0,就代表这进程的退出码,表征进程运行结果是否正确,通常0表示正确。

int main()
{printf("一个进程\n");return 0;	//0->success
}

这个退出码会被父进程(bash)接收,我们可以使用指令==echo $?==拿到上一个进程的退出码,在命令行中,所以指令的父进程都是bash

就好比,谁会关心一个孩子的成长呢?那肯定是他们的父母

而对应正确的退出码,只有一个,那就是0,因为成功了,并不会详细询问;而运行结果不正确,则需要返回对应的退出码,告诉父进程,是什么原因失败了。

例如我们考了班上的第一名,家长会说,儿子(小甜心)真棒!走,带你去吃好吃的;

而我们如果考了倒数,家长则会问为什么只考了这么点分?是什么原因?

image-20231026114604363

所以这个main函数的返回值,本质上表示进程运行完成时是否运行正确;如果不正确,就用不同的数字表示不同的错误原因。

strerror

不过这些数字的退出码,是给计算机看的,我们并不懂,所以需要将这些退出码转换成对应的错误信息,所以在Linux中有一个接口strerror,将退出码转换成字符串。

image-20231026115316835

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>                                                                                                                                                                 
int main()
{for(int i =0;i<150;i++){printf("%d: %s\n",i,strerror(i));}return 0; //进程的退出码,表征进程的运行结果是否正确  0-> success
}

通过strerror接口,我们就能查看到各个退出码所对应的信息。例如我们main函数返回的0

image-20231026133935136

其实本质上,父进程接收退出码,是为了给用户返回错误信息,已便用户做出相应的措施

errno

C语言也提供了一个接口errno,这里能返回最新一个错误码

image-20231026141051689

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
int main()
{char* ch = (char*)malloc(1024*1024*1024*10);int ret = 0;if(ch == NULL)                                                                      {printf("malloc error ,%d -> %s\n",errno,strerror(errno));ret = errno;}else{printf("malloc success\n");}return ret;
}

浅谈进程异常

当进程退出异常的时候,这时候的退出码意义并不是很大。

比如说,在一场考试过程中,有人作弊被抓到,这时候,他就属于考试异常,那么他的这个成绩也就无关紧要了。

这时候对于老师或者家长,就要知道,这个异常的原因,而不是考试的成绩

我们对指针的解引用操作,或者进行除0操作,都会导致程序异常,这些都有对应的信号,系统转给我们的进程,让其退出

int main()
{int* p;*p = 10;	//对野指针解引用int a = 1;a/=0;	//除0错误return 0;
}

image-20231026163534011

我们可以通过验证来发现,但我们进程没有发生错误的时候,我们主动给这个进程发信息,来模拟这个除零错误

kill-8

exit && _exit

要终止一个进程,我们可以使用C语言提供的接口exit,在之前也见过,但我们这个exit()括号里面的数字,都不知道怎么填,一般都填的-1,有了本次知识的了解,我们就能知道,这个括号里面填的就是进程的退出码。

image-20231026192418644

exit在**main函数**里面和return是等价的,都可以返回进程的退出码;

而在某个函数里面,exit也是表示当前进程直接退出,而return则指标是退出当前函数;

使用,exit在任何地方都表示进程退出,而return只是在main函数里面表示进程退出

系统也提供了一个接口_exit,它的功能也是直接终止进程,参数和返回值和exit一样

image-20231026193208069

exit_exit的区别:

此篇文章之前提到过,关于缓冲区的概念,不了解的可以先看一下此篇文章:Linux进度条小程序_请揣满RMB的博客-CSDN博客

我们来看这4段代码的执行结果:

image-20231026204718435

运行发现调用exit退出进程,会刷新缓冲区之后再终止进程;而_exit是直接退出进程。

其实本质上exit在调用的时候,会先执行用户定义的一些清理函数,然后刷新缓冲区,最后再调用_exitexit_exit是一个调用与被调用的关系。

image-20231026205515574

这里我们也可以得出一个结论:缓冲区绝对不在内核区

相关文章:

Linux进程终止

文章目录 进程退出场景进程退出码strerrorerrno浅谈进程异常exit && _exit 进程退出场景 代码运行完毕&#xff0c;结果正确代码运行完毕&#xff0c;结果不正确代码异常 进程退出码 我们写的C/C的代码&#xff0c;main函数每次都需要返回0&#xff0c;而这个return…...

0036【Edabit ★☆☆☆☆☆】【让我加油】Let‘s Fuel Up!

0036【Edabit ★☆☆☆☆☆】【让我加油 】Let’s Fuel Up! control_flow language_fundamentals numbers Instructions A vehicle needs 10 times the amount of fuel than the distance it travels. However, it must always carry a minimum of 100 fuel before setting o…...

React 中常用的几种路由跳转方式

目录 一、push跳转 1、Link组件&#xff1a; 二、replace跳转 三、goBack跳转&#xff08;回退&#xff09; 四、goForward跳转&#xff08;前进&#xff09; 五、 go跳转&#xff08;向前或向后跳转指定步数&#xff09; 一、push跳转 1、Link组件&#xff1a; 可以在不刷新…...

C++内存管理:其七、标准库中的allocator

首先明确一点&#xff0c;绝大多数情况下&#xff0c;是标准库中的容器使用allocator。因为容器需要频繁的申请和释放内存。 一、容器使用allocator 典型的例子&#xff1a; vector<int , allocator<int>> a;但是为什么我们通常的定义vector变量的方法是&#x…...

【机器学习合集】人脸表情分类任务Pytorch实现TensorBoardX的使用 ->(个人学习记录笔记)

人脸表情分类任务 注意&#xff1a;整个项目来自阿里云天池&#xff0c;下面是开发人员的联系方式&#xff0c;本人仅作为学习记录&#xff01;&#xff01;&#xff01;该文章原因&#xff0c;学习该项目&#xff0c;完善注释内容&#xff0c;针对新版本的Pytorch进行部分代码…...

Maven - 国内 Maven 镜像仓库(加速包,冲冲冲~)

<?xml version"1.0" encoding"UTF-8" ?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding…...

【Solidity】智能合约案例——③版权保护合约

目录 一、合约源码分析&#xff1a; 二、合约整体流程&#xff1a; 1.部署合约&#xff1a; 2.添加实体&#xff1a; 3.查询实体 4.审核版权&#xff1a; 5.版权转让 一、合约源码分析&#xff1a; Copyright.sol&#xff1a;主合约&#xff0c;定义了版权局的实体&#xff…...

Cisco IOS XE Web UI 命令执行漏洞

Cisco IOS XE Web UI 命令执行漏洞 受影响版本 Cisco IOS XE全版本 漏洞描述 Cisco IOS XE Web UI 是一种基于GUI的嵌入式系统管理工具&#xff0c;能够提供系统配置、简化系统部署和可管理性以及增强用户体验。它带有默认映像&#xff0c;因此无需在系统上启用任何内容或安…...

qwen大模型,推理速度慢,单卡/双卡速度慢,flash-attention安装,解决方案

场景 阿里的通义千问qwen大模型&#xff0c;推理速度慢&#xff0c;单卡/双卡速度慢。 详细&#xff1a; 1、今日在使用qwen-14b的float16版本进行推理&#xff08;BF16/FP16) 1.1 在qwen-14b-int4也会有同样的现象 2、使用3090 24G显卡两张 3、模型加载的device是auto&#x…...

3.SpringSecurity基于数据库的认证与授权

文章目录 SpringSecurity基于数据库的认证与授权一、自定义用户信息UserDetails1.1 新建用户信息类UserDetails1.2 UserDetailsService 二、基于数据库的认证2.1 连接数据库2.2 获取用户信息2.2.1 获取用户实体类2.2.2 Mapper2.2.3 Service 2.3 认证2.3.1 实现UserDetails接口2…...

【软件测试】自动化测试selenium

目录 一、什么是自动化测试 二、Selenium介绍 1、Selenium是什么 2、Selenium的原理 三、了解Selenium的常用API 1、webDriver API 1.1、元素定位 1.1.1、CSS选择器 1.1.2、Xpath元素定位 1.1.3、面试题 1.2、操作测试对象 1.3、添加等待 1.4、打印信息 1.5、浏…...

​​​​​​​如何解决Google play开发者新注册账号,身份验证的地址证明问题?

我们知道&#xff0c;Google Play应用市场的发展速度惊人&#xff0c;但这两年&#xff0c;为了防止恶意软件的传播&#xff0c;谷歌要求开发者账号需要进行身份验证才能发布应用。 而今年越来越严格&#xff0c;不仅在提审时需要进行电话验证&#xff08;链接&#xff09;&am…...

Gin vs Beego: Golang的Web框架之争

前言 Golang作为一门高效且简洁的语言&#xff0c;已经在Web开发领域得到了广泛的应用。Gin和Beego是Golang中两个著名的Web框架&#xff0c;它们都提供了一系列强大的功能&#xff0c;帮助开发者构建高性能的Web应用。本文将对Gin和Beego进行全面的对比&#xff0c;帮助开发者…...

javascript IP地址正则表达式

/^(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2})\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)$/g.test(10.2.35.8) 注&#xff1a; 一定不要把表达式赋值给变量&#xff0c;直接…...

【Bash】记录一个长命令换行的BUG

假设现在我要在terminal执行如下命令跑模型&#xff1a; CUDA_VISIBLE_DEVICES6 python finetune.py -c configs/quantized/resnet32_cifar100_finetune.yml --model resnet32 --data-dir ~/datasets --apex-amp --initial-checkpoint /home/zwx/projects/hawq/resnet32.pth.t…...

【.net core】yisha框架imageupload组件多图上传修改

框架\wwwroot\lib\imageupload\1.0\js路径下imgup.js文件&#xff0c;参照旧版本代码和修改代码修改 (function ($) {"use strict";var deleteParent;var deleteDisplay none;var defaults {fileType: ["jpg", "png", "bmp", "…...

vscode markdown 使用技巧 -- 如何快速打出一个Tab 或多个空格

背景描述&#xff1a; 我在使用VSCode&#xff0c;这玩意很好用&#xff0c;但是&#xff0c;有一个缺点是&#xff0c;我想使用Tab来做一些对齐&#xff0c;但是我发现在VSCode中&#xff0c;无论是Tab还是多个空格&#xff0c;最终显示出来的都是一个空格 使用代码可以实现打…...

I/O 模型学习笔记【全面理解BIO/NIO/AIO】

文章目录 I/O 模型什么是 I/O 模型Java支持3种I/O模型BIO&#xff08;Blocking I/O&#xff09;NIO&#xff08;Non-blocking I/O&#xff09;AIO&#xff08;Asynchronous I/O&#xff09; BIO、NIO、AIO适用场景分析 java BIOJava BIO 基本介绍Java BIO 编程流程一个栗子实现…...

【Python学习笔记】字符编码

1. 字符串编码 Python3语言里面的字符串对象是unicode字符串&#xff0c;在内存中实际存储时&#xff0c;使用的是 UTF16 编码。但通常不会将UTF16编码的内容写到磁盘或者在网络进行传输&#xff0c; 因为utf16编码比较浪费空间。特别是如果文字信息基本都是英文符号的情况下&…...

华为昇腾NPU卡 大模型LLM ChatGLM2模型推理使用

参考&#xff1a;https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/glm2.md#chatglm2-6b 1、安装环境&#xff1a; 昇腾NPU卡对应英伟达GPU卡&#xff0c;CANN对应CUDA底层&#xff1b; mindspore对应pytorch&#xff1b;mindformers对应transformers 本…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...