Linux笔记---进程:进程终止

news2024/12/27 8:11:05

1. 进程终止概念与分类

进程终止是指一个正在运行的进程结束其执行的操作。以下是一些常见的导致进程终止的情况:

一、正常终止

  1. 完成任务当进程完成了它被设计要执行的任务后,就会正常终止。
  2. 收到特定信号在操作系统中,进程可能会收到来自操作系统或者其他进程发送的信号来终止自身。比如,在Linux系统中,主进程可以向子进程发送SIGTERM信号来请求子进程正常终止。子进程接收到这个信号后,可以进行一些清理工作(如关闭文件、释放内存等),然后终止进程。

二、异常终止

  1. 错误情况如果进程遇到了无法处理的错误,就可能会异常终止。例如,一个程序试图读取一个不存在的文件,并且没有合适的错误处理机制,可能会因为文件读取错误而崩溃终止。
  2. 非法操作当进程执行了非法操作时也会异常终止。在内存管理方面,如果进程试图访问它没有权限访问的内存地址(如空指针引用或者越界访问数组),操作系统通常会终止这个进程以保护系统的稳定性和安全性。

 2. 退出码

进程在终止时会返回一个退出码,退出码(也称为返回码或状态码)是一个整数值,用于表示命令或程序执行后的状态。退出码通常用于指示命令是否成功执行,以及如果没有成功,原因是什么。

以下是一些常见的Linux退出码及其含义:

  • 0:表示命令成功执行。
  • 1:表示一般错误,通常是由于命令的语法错误或参数错误导致的。
  • 2:表示命令使用不当,通常是由于命令的参数错误或使用方式错误导致的。
  • 126:表示权限被拒绝,通常是由于用户没有足够的权限来执行命令。
  • 127:表示命令未找到,通常是由于命令的路径没有被正确设置或命令不存在。
  • 128+n:表示命令被信号n终止,其中n是信号的编号。例如,130表示命令被SIGINT信号(通常是通过Ctrl+C发送)终止。
  • 143:表示命令被SIGTERM信号终止,这是默认的终止信号。
  • 255:表示退出码超过了0-255的范围,通常是由于程序内部错误或异常导致的。

 在命令行输入[echo $?]即可查看上一条指令的退出码:

注意,进程的退出码和C语言的错误码并不是一回事,二者具有一定的对应关系,但并不完全相同。 


3. 进程退出的常见方式 

3.1 从main函数返回

在main函数中通过return关键字返回的整型值就是进程的退出码。

程序正常执行结束时,我们通常会返回0,表示执行成功;程序运行到某个异常分支需要提前终止时,我们通常会返回1,表示执行失败。

3.2 调用exit()或_exit()函数退出

在C语言中,_exit函数和exit函数都用于终止程序的执行,这意味着这两个函数一旦被调用就会立即终止其调用者的执行。

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

_exit函数是一个系统调用,定义在<unistd.h>头文件中。它用于立即终止程序,不执行任何清理操作。这意味着它不会调用通过atexit注册的函数,也不会刷新输出缓冲区。

_exit函数通常用于需要快速终止程序的场景,例如在子进程中调用fork后,为了避免影响父进程的状态或输出,可以使用_exit函数立即退出。

注意,status虽然是整形(四个字节),但是仅有低8位可以被父进程所用。所以_exit(-1)时,在终端执行$?发现返回值是255。

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

exit函数是一个标准库函数,定义在<stdlib.h>头文件中。它用于正常或异常地终止程序,并执行一些清理操作。在调用exit时,程序会执行以下操作:

  1. 调用所有已注册的atexit函数,这些函数可以用于释放资源、关闭文件等。
  2. 刷新所有输出缓冲区,确保所有数据都被写入。
  3. 关闭所有打开的文件描述符。

exit函数通常用于程序正常完成或者遇到错误需要提前终止时,使用exit来终止进程。

exit函数其实就是封装了作为系统调用的_exit函数,本质上就是在做完上述工作之后调用_exit函数进行退出。

3.2.3 总结

_exit函数和exit函数的主要区别在于_exit函数不会进行任何清理操作,而exit函数会执行必要的资源清理操作,确保程序能够优雅地终止。在实际编程中,应根据具体情况选择使用哪个函数。如果需要快速终止程序,不关心资源清理,可以使用_exit函数;如果需要在程序终止前进行一些清理工作,应该使用exit函数。

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

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

相关文章

立创庐山派 K230 RTSP 推流

立创庐山派使用的是K230芯片&#xff0c;按照教程刷了canmv固件&#xff0c;下载canmv ide&#xff0c;使用嘉楠社区的rtsp和wlan例程&#xff0c;修改成连接wifi以及RTSP推流例程 # Description: This example demonstrates how to stream video and audio to the network us…

Oracle数据恢复—Oracle数据库sysaux文件损坏的数据恢复案例

Oracle数据库故障&分析&#xff1a; 一台Oracle数据库打开报错&#xff0c;报错信息&#xff1a; “system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。管理员联系我们数据恢复中心寻求帮助&#xff0c;并提供了Oracle_Home目录的所有文件。用户方要求…

【kafka04】消息队列与微服务之Kafka 图形工具

Kafka 在 ZooKeeper 里面的存储结构 topic 结构 /brokers/topics/[topic] partition结构 /brokers/topics/[topic]/partitions/[partitionId]/state broker信息 /brokers/ids/[o...N] 控制器 /controller 存储center controller中央控制器所在kafka broker的信息 消费者 /c…

微众银行前端面试题及参考答案

使用的协议是 HTTP 还是 HTTPS&#xff0c;为什么没用 HTTPS&#xff1f; 在前端开发中&#xff0c;有些网站使用 HTTP 协议&#xff0c;有些使用 HTTPS 协议。 使用 HTTP 协议的情况可能是因为网站对安全性的要求不是极高&#xff0c;或者处于开发的早期阶段&#xff0c;还没有…

第144场双周赛:移除石头游戏、两个字符串得切换距离、零数组变换 Ⅲ、最多可收集的水果数目

Q1、[简单] 移除石头游戏 1、题目描述 Alice 和 Bob 在玩一个游戏&#xff0c;他们俩轮流从一堆石头中移除石头&#xff0c;Alice 先进行操作。 Alice 在第一次操作中移除 恰好 10 个石头。接下来的每次操作中&#xff0c;每位玩家移除的石头数 恰好 为另一位玩家上一次操作…

UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e

近日&#xff0c;优傲&#xff08;UR&#xff09;机器人公司立足中国市场需求&#xff0c;重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲&#xff08;UR&#xff09;一以贯之的高品质与性能特质&#xff0c;着重优化负载自重比&#xff0c;且在价格层面具竞争力&…

应急响应靶机——Windows挖矿事件

载入虚拟机&#xff0c;开启虚拟机&#xff1a; &#xff08;账户密码&#xff1a;administrator/zgsf123&#xff09; 发现登录进去就弹出终端界面&#xff0c;自动运行powshell命令&#xff0c;看来存在计划任务&#xff0c;自动下载了一些文件&#xff0c;之后就主动结束退…

基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)

乳腺癌是全球女性中最常见的恶性肿瘤之一&#xff0c;早期准确诊断对于提高生存率具有至关重要的意义。传统的乳腺癌诊断方法依赖于放射科医生的经验&#xff0c;然而&#xff0c;由于影像分析的复杂性和人类判断的局限性&#xff0c;准确率和一致性仍存在挑战。近年来&#xf…

深入浅出机器学习中的梯度下降算法

大家好&#xff0c;在机器学习中&#xff0c;梯度下降算法&#xff08;Gradient Descent&#xff09;是一个重要的概念。它是一种优化算法&#xff0c;用于最小化目标函数&#xff0c;通常是损失函数。梯度下降可以帮助找到一个模型最优的参数&#xff0c;使得模型的预测更加准…

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer

【0x0001】HCI_Set_Event_Mask详解

目录 一、命令概述 二、命令格式 三、命令参数说明 四、返回参数说明 五、命令执行流程 5.1. 主机准备阶段 5.2. 命令发送阶段 5.3. 控制器接收与处理阶段 5.4. 事件过滤与反馈阶段 5.5. 主机处理&#xff08;主机端&#xff09; 5.6. 示例代码 六、命令应用场景 …

可解释机器学习 | Python实现LGBM-SHAP可解释机器学习

机器学习 | Python实现GBDT梯度提升树模型设计 目录 机器学习 | Python实现GBDT梯度提升树模型设计基本介绍模型使用参考资料基本介绍 LightGBM(Light Gradient Boosting Machine)是一种基于决策树的梯度提升框架,是一种高效的机器学习模型。SHAP(SHapley Additive exPlan…

【Rust在WASM中实现pdf文件的生成】

Rust在WASM中实现pdf文件的生成 概念和依赖问题描述分步实现最后 概念和依赖 . WASM WebAssembly&#xff08;简称WASM&#xff09;是一个虚拟指令集体系架构&#xff08;virtual ISA&#xff09;&#xff0c;旨在为C/C等语言编写的程序提供一种高效的二进制格式&#xff0c;使…

Java开发每日一课:Java开发岗位要求

找过工作的朋友应该知道&#xff0c;现在招聘Java开发工程师的公司特别多。那么Java开发这个岗位具体是做什么的&#xff1f;又有什么招聘要求呢&#xff1f; 我毕业的时候也面试过很多公司&#xff0c;当时对Java开发这个岗位的要求不甚了解&#xff0c;因为懂Java语法知识就能…

Spring Boot日志总结

文章目录 1.我们的日志2.日志的作用3.使用日志对象打印日志4.日志框架介绍5.深入理解门面模式(外观模式)6.日志格式的说明7.日志级别7.1日志级别分类7.2配置文件添加日志级别 8.日志持久化9.日志文件的拆分9.1官方文档9.2IDEA演示文件分割 10.日志格式的配置11.更简单的日志输入…

2025年Java面试八股文大全

很多人会问Java面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试的制度。 而且&#xff0c;我国的八股文确…

DPDK用户态协议栈-Tcp Posix API 1

和udp一样&#xff0c;我们需要实现和系统调用一样的接口来实现我们的tcp server。先来看看我们之前写的unix_tcp使用了哪些接口&#xff0c;这边我加上两个系统调用&#xff0c;分别是接收数据和发送数据。 #include <stdio.h> #include <arpa/inet.h> #include …

记一次搞校园网的经历

接教室的校园网&#xff0c;到另一个屋子玩电脑&#xff0c;隔墙想放大一下AP的信号&#xff0c;发现死活不行 这是现状 由于校园网认证的存在&#xff0c;无法用桥接&#xff0c;桥接需要路由器有IP&#xff0c;而这个IP无法用未刷机的路由器来打开校园网页面认证 解决 将一…

RTC 实时时钟实验

利用 ALIENTEK 2.8 寸 TFTLCD 模块来显示日期和时间&#xff0c;实现一个简单的时钟。 STM32F1 RTC 时钟简介 STM32 的实时时钟&#xff08; RTC &#xff09;是一个独立的定时器。 STM32 的 RTC 模块拥有一组连续计数 的计数器&#xff0c;在相应软件配置下&#xf…

接口性能优化宝典:解决性能瓶颈的策略与实践

目录 一、直面索引 &#xff08;一&#xff09;索引优化的常见场景 &#xff08;二&#xff09;如何检查索引的使用情况 &#xff08;三&#xff09;如何避免索引失效 &#xff08;四&#xff09;强制选择索引 二、提升 SQL 执行效率 &#xff08;一&#xff09;避免不必…