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

《Linux篇》进程控制——进程创建(写时拷贝)、进程终止(退出码,exit,_exit)

文章目录

    • 1.进程创建
    • 2.进程终止

1.进程创建

之前我们已经学了使用fork来创建进程,现在我们主要谈的是写时拷贝!!!
在这里插入图片描述
因此有写时拷⻉技术的存在,所以⽗⼦进程得以彻底分离离!完成了进程独立性的技术保证!写时拷⻉,是⼀种延时申请技术,可以提⾼整机内存的使⽤率。
当然fork也有可能会创建失败:①系统中进程太多②用户的实际进程超过了限制(对用户有限制)

2.进程终止

当进程终止时,操作系统要做些什么呢?我们main函数退出时我们都会写个return 0,为什么要写,是给谁返回的呢?
在这里插入图片描述
我们把return 0叫做进程退出的退出码,未来系统会获得这个return 0退出码,用来让系统辨别该进程的执行情况。

我们将上面的代码改成return 10看看情况:
在这里插入图片描述
?会记录最近一个进程执行完的退出码,$?是取出该数值。echo也是一个命令,退出码为0表示运行成功。

Q:为什么要有退出码?
A:子进程把父进程交给自己的任务,办的怎么样,父进程是需要知道的,就是通过看退出码来看:0表示成功了,非0表示没有成功,1,2,3…表明不同的失败原因。

Linux Shell 中的主要退出码:
在这里插入图片描述
C语言给我们提供了一些内置的错误原因函数:
strerror
在这里插入图片描述
在进程的PCB中会有个属性exit_code保存这个退出码的信息。
在这里插入图片描述

如下我们正式来谈进程终止。

进程退出,无非就是三种情况:①代码跑完,结果对②代码跑完,结果不对③代码没跑完,进程异常。现在我们主要处理前两种情况,代码跑完了,结果对不对由退出码来决定。代码异常了,退出码没有意义。当进程异常了,信号需要知道,管理者OS一定会知道,一般都是杀掉这个进程,用信号来杀掉进程:kill -9 XXX

Q:那么退出码从哪里获取呢?
A:方法一:main函数进行return n,n表示的就是退出码;方法二:直接调用exit(n),exit的参数n等同于return的返回值,表示退出码;方法三:系统调用,直接调用_exit(n)
在这里插入图片描述
在这里插入图片描述

Q1:return和exit方式有什么区别
A1:return通常表示函数调用结束,main函数比较特殊,return表示进程退出;exit表示的是进程结束,在我们的代码里面,任何地方调用,都会导致进程退出。

Q2:exit和_exit方式有什么区别
A2:exit是C语言库函数,_exit是系统调用,exit终止进程会自动刷新缓冲区,_exit直接终止进程不会刷新缓冲区。而return也会在进程结束时,也会刷新缓冲区。(与exit一样)

补充:进程终止必定要调用系统调用,必须要让操作系统完整真正的让进程删除退出。库函数和系统调用是上下层关系,exit只是在底层封装了_exit,这样才能完成真正的进程终止。

Q:那么输出缓冲区应该在哪里呢?
A:
在这里插入图片描述

http://www.dtcms.com/a/540043.html

相关文章:

  • 【MATLAB 数据分析学习指南】
  • Android PDF 操作 - AndroidPdfViewer 显示 PDF 异常清单(数据为 null、数据为空、PDF 文件损坏、非 PDF 文件)
  • 界面控件DevExpress WPF v25.2预览 - 模板工具包全新升级
  • 【音视频】H264中的SPS和PPS
  • ThinkPHP6 集成TCP长连接 GatewayWorker
  • TMap的查询
  • SpringCloud--Sleuth 解析
  • 【C++:继承和多态】多态加餐:面试常考——多态的常见问题11问
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-哨兵集群
  • 今日Cortex-M3/M4研究总结
  • 2014吉林省赛题解 | CCUT应用OJ题解——Sign in
  • 涿州网站建设推广浙江建筑信息网站
  • 前端性能优化实战指南:从首屏加载到用户体验的全面提升
  • 【OPENGL ES 3.0 学习笔记】第十一天:glDrawArrays和glDrawElements
  • Linux入门1(2/2)
  • ubuntu24安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1
  • 【星光不负 码向未来 | 万字解析:基于ArkUI声明式UI与分布式数据服务构建生产级跨设备音乐播放器】
  • UniApp 在手机端(Android)打开选择文件和文件写入
  • HarmonyOS分布式媒体播放器——跨设备音视频无缝流转
  • 【金融行业案例】基于Vaadin全栈Java框架重构内部系统,全面提升开发效率与用户体验
  • 小型网站开发要多少钱苏州专业做网站的公司哪家好
  • RocketMQ 生产环境性能调优实战:从 0 到 1 打造高可用消息队列系统
  • 脉冲按摩贴方案开发, 脉冲按摩贴MCU控制方案设计
  • 特别酷炫网站做网站有费用吗
  • DrissionPage 基于 Python 的网页自动化工具
  • Next.js vs Vue.js:2025年全栈战场,谁主沉浮?
  • DAY01笔记
  • 10-js基础(ESMAScript)
  • 一次深入排查:Spring Cloud Gateway TCP 连接复用导致 K8s 负载均衡失效
  • 基于 Vue3 及TypeScript 项目后的总结