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的参数。

(本章完)

相关推荐
apcipot_rain6 小时前
C++转Java日记(04)
java·开发语言·c++
云和数据.ChenGuang7 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
天诰8 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
2035去旅行9 小时前
bootcmd 详细讲解
linux·嵌入式·arm·soc
陈希12310 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
蜗牛一步步往上爬10 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
女神下凡10 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
@兽血沸腾11 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
张张123y12 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
且从容.14 小时前
Ubuntu安装flume
linux·ubuntu·flume