Linux进程终止——退出码、exit与_exit

目录

[1. 引言](#1. 引言)

[2. 进程终止的本质](#2. 进程终止的本质)

[3. 进程退出场景](#3. 进程退出场景)

[4. 常见退出方法](#4. 常见退出方法)

正常终止

异常终止

[5. 退出码(Exit Code)](#5. 退出码(Exit Code))

[6. exit 函数](#6. exit 函数)

[7. _exit 函数](#7. _exit 函数)

示例对比

[8. return 退出](#8. return 退出)

[9. 补充:atexit 函数(扩展)](#9. 补充:atexit 函数(扩展))

[10. 总结](#10. 总结)


1. 引言

进程终止是进程生命周期的最后阶段。Linux提供了多种退出方式,每种方式在资源释放、数据刷新、退出码传递上有所不同。本文将详细分析进程终止的本质、退出码含义以及 exit_exit 的区别。

2. 进程终止的本质

释放进程申请的内核数据结构(task_struct、mm_struct等)和用户空间的代码与数据。

3. 进程退出场景

  • 代码运行完毕,结果正确:退出码为0;

  • 代码运行完毕,结果错误:退出码为非0;

  • 代码异常终止 :收到信号(如 SIGSEGVSIGKILL)。

4. 常见退出方法

正常终止
  • main 函数 return

  • 调用 exit()

  • 调用 _exit() / _Exit()

异常终止
  • ctrl + cSIGINT);

  • kill -9SIGKILL)等信号。

5. 退出码(Exit Code)

退出码是进程返回给父进程的一个整数值,低8位有效。在Shell中可以通过 echo $? 查看上一个命令的退出码。

退出码 含义
0 成功
1 通用错误
2 命令使用不当
126 权限不足或无法执行
127 命令未找到
128+n 被信号n终止
130 被 SIGINT 终止(Ctrl+C)
143 被 SIGTERM 终止

可以使用 strerror()perror() 获取退出码对应的描述信息。

6. exit 函数

c

复制代码
#include <stdlib.h>
void exit(int status);

exit 在调用 _exit 之前会执行以下清理工作:

  1. 执行通过 atexit()on_exit() 注册的清理函数;

  2. 刷新所有标准IO流缓冲区,关闭所有打开的流;

  3. 调用 _exit(status)

7. _exit 函数

c

复制代码
#include <unistd.h>
void _exit(int status);

_exit 会立即进入内核,不做任何用户态清理(不刷新缓冲区、不执行 atexit 函数)。

示例对比

c

复制代码
// 使用 exit
printf("hello");  // 没有换行,仍在缓冲区
exit(0);          // 刷新缓冲区,输出 "hello"

// 使用 _exit
printf("hello");
_exit(0);         // 不刷新缓冲区,无输出

8. return 退出

main 中执行 return n 等价于调用 exit(n),因为 main 的返回值会被运行时函数作为 exit 的参数。

9. 补充:atexit 函数(扩展)

c

复制代码
#include <stdlib.h>
int atexit(void (*function)(void));

可以注册多个函数,在 exit 调用时按注册相反顺序执行。常用于资源释放、日志记录等。

10. 总结

  • 希望完整清理和刷新数据时使用 exitreturn

  • 需要立即终止、不执行任何清理时使用 _exit

  • 退出码是父子进程通信的重要方式,应规范使用。

相关推荐
码农客栈5 分钟前
linux 设备树下的 platform 驱动编写
linux
小HANN10 分钟前
Linux建站实战:CentOS7+LNMP 从零部署 ECShop 开源电商系统
linux·运维·服务器·经验分享
做运维的阿瑞20 分钟前
Shell 脚本经典十三问:引号、变量、子 Shell 与重定向一次讲清问:引号、变量、子 Shell 与重定向一次讲清
linux·tcp/ip
昌原的儿子LEO42 分钟前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
GeW44 分钟前
RHCE通关秘籍:从零基础到高分拿证的5个加速器
linux
三8441 小时前
SSRF 从入门到实战:原理、危害与基础利用
服务器·网络安全·ssrf·#web安全
前端世界1 小时前
基于 Linux 的本地 AI 智能问答平台搭建实践 —— Ollama + FastAPI + Nginx 实现本地大模型 Web 服务
linux·运维·人工智能
倔强的石头1061 小时前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
代码方舟2 小时前
O2O二手车交易平台B端车商管理后台:基于天远车信盟出险构建自动化车况评估网关
java·运维·人工智能·自动化