Linux中的进程终止(详解)

Linux中的进程终止

  • [1. 进程退出场景](#1. 进程退出场景)
  • [2. 进程常见退出方法](#2. 进程常见退出方法)
    • [2.1 _exit函数](#2.1 _exit函数)
    • [2.2 exit函数](#2.2 exit函数)
    • [2.3 return退出](#2.3 return退出)

1. 进程退出场景

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

2. 进程常见退出方法

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

1. 从main返回

cpp 复制代码
#include <stdio.h>
int main()
{
    printf("测试退出码\n");
    return 9;
}

2. 调用exit

cpp 复制代码
#include <stdio.h>
 int main()
 {
     printf("测试退出码");
     sleep(3);
     exit(1);                                                                                                                                      
 }

3. _exit

一样的代码,exit()换成_exit();

cpp 复制代码
int main()
 {
     printf("测试退出码");
     sleep(3);
     _exit(1);                                                                                                                                      
 }

什么都不刷新,程序直接退出

异常退出:

ctrl + c,信号终止


2.1 _exit函数

功能:exit函数用于正常终止程序的执行,并返回一个整数值给操作系统,表示程序的退出状态。它会执行一系列的清理工作,例如关闭打开的文件、释放动态分配的内存等,然后将状态码传递给操作系统。状态码通常用来向调用程序传递一些信息,例如指示执行是否成功或失败。

cpp 复制代码
#include <unistd.h>
void _exit(int status);
参数:status 定义了进程的终止状态,父进程通过wait来获取该值
  • 说明:虽然status是int,但是仅有低8位可以被父进程所用。所以_exit(-1)时,在终端执行$?发现返回值是255。
  • exit函数还会刷新标准I/O缓冲区,以确保输出被正确写入文件。

2.2 exit函数

功能:_exit函数用于立即终止程序的执行,不执行任何清理工作,不刷新I/O缓冲区。它直接将状态码传递给操作系统,然后操作系统会终止程序的执行。

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

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

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

2.3 return退出

  • return语句用于从函数中返回,并可选择返回一个值。当return语句执行时,它会立即退出当前函数,并将控制权返回给调用该函数的地方。
  • return是一种更常见的退出进程方法。执行return等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做 exit的参数。

(本章完)

相关推荐
鬼手点金18 分钟前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
贵州诚鑫致达科技有限公司1 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
遇印记2 小时前
传输层,网络层
运维·服务器·网络·windows·学习
死磕音视频2 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
Elastic 中国社区官方博客2 小时前
一条 ES|QL 查询,涵盖365天的审计日志:在热数据和可搜索快照上执行相同的搜索
大数据·运维·服务器·elasticsearch·搜索引擎·全文检索
北京中科新远科技3 小时前
高速光模块上线验收实战:DOM、FEC、BER与端口计数器怎么一起看
服务器·网络·php
澜山奕秋4 小时前
RHCSA
linux·运维·服务器
pride.li4 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
顽疲5 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog5 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友