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

(本章完)

相关推荐
_OP_CHEN3 小时前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
Web极客码3 小时前
WordPress博客关键词
服务器·wordpress·网站加速
csbysj20203 小时前
AngularJS 模块
开发语言
独好紫罗兰3 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n3 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
不会代码的小测试3 小时前
UI自动化-POM封装
开发语言·python·selenium·自动化
roman_日积跬步-终至千里3 小时前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络
Fleshy数模3 小时前
MySQL 表创建全攻略:Navicat 图形化与 Xshell 命令行双模式实践
linux·mysql
lsx2024063 小时前
C++ 基本的输入输出
开发语言
CodeSheep程序羊4 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展