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

(本章完)

相关推荐
陈让然4 小时前
WSL 桥接设置静态IP(快速)
linux·网络·ubuntu
quantdash_cc4 小时前
Pandas 处理分钟级股票行情:从原始数据清洗到 K 线聚合
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
yu_zhidun4 小时前
企业电脑监控软件怎么选:别只看功能清单,先看这 6 个底层能力
开发语言·电脑·php·域智盾系统
乔旭伟4 小时前
Linux 服务器备份实战:一致性快照、日志归档与恢复演练
linux·运维·服务器
乔旭伟4 小时前
Linux 服务器安全加固实战:SSH、防火墙、补丁与入侵排查
linux·服务器·安全
无忧.芙桃4 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态
李纲明5 小时前
WordPress 白屏排查手册:关插件、换主题、开调试、查 PHP(附停手信号)
开发语言·php·wordpress·故障排查·白屏·插件冲突
裕晟资质规划5 小时前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全
ShineWinsu5 小时前
对于JavaScript:JavaScript基础语法的解析
开发语言·前端·javascript·面试·web·基础语法·循环
刘胡子大叔5 小时前
备份包只有 1.5K?
linux·服务器·网络