当前位置: 首页 > article >正文

Linux中的进程终止(详解)

Linux中的进程终止

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

1. 进程退出场景

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

2. 进程常见退出方法

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

1. 从main返回

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

在这里插入图片描述

2. 调用exit

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

在这里插入图片描述

在这里插入图片描述

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

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

什么都不刷新,程序直接退出
在这里插入图片描述

异常退出:

ctrl + c,信号终止

在这里插入图片描述


2.1 _exit函数

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

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

2.2 exit函数

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

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

(本章完)


http://www.kler.cn/a/133426.html

相关文章:

  • C++静态成员
  • Java I/O(输入/输出)——针对实习面试
  • 数据结构--数组
  • FlinkPipelineComposer 详解
  • 算法每日双题精讲——滑动窗口(长度最小的子数组,无重复字符的最长子串)
  • 【CSS】什么是BFC?
  • Pandas数据操作_Python数据分析与可视化
  • Python学习(一)基础语法
  • 11. Spring源码篇之实例化前的后置处理器
  • ElasticSearch综合练习题,ES为8版本,使用Kibana运行语句
  • SQL Server中substring的用法
  • 在Rust编程中使用泛型
  • Mysql-CRUD(增删查改)
  • PS学习笔记——新建文档/修改文档
  • 【飞控调试】DJIF450机架+Pixhawk6c mini+v1.13.3固件+好盈Platinium 40A电调无人机调试
  • 竞赛选题 深度学习验证码识别 - 机器视觉 python opencv
  • 工厂自动化中DCS软件
  • 让你彻底学会HBase
  • 11.5MyBatis(进阶)
  • 若依前后端分离版,快速上手
  • 五、Linux目录结构
  • 大模型LLM 在线量化;GPTQ\AWQ量化
  • 记录将excel表无变形的弄进word里面来
  • 【Oracle 客户端连接数据库过程解析】
  • 云计算和跨境电商:数字化未来的基石
  • 科研小白成长记37——换档