【Linux】进程控制(一)

 

1. 进程创建

(一)认识fork函数

从已存在进程中创建一个新进程(新进程为子进程,而原进程为父进程)

进程调用fork,当控制转移到内核中的fork代码后,内核做:

  1. 分配新的内存块和内核数据结构给子进程
  2. 将父进程部分数据结构内容拷贝至子进程
  3. 添加子进程到系统进程列表当中
  4. fork返回,开始调度器调度

注意:

  1. 当一个进程调用fork之后,就有两个二进制代码相同的进程。进程是独立的,互不干扰对方运行
  2. fork之后,谁先执行完全由调度器决定

(二)fork函数返回值

  1. 子进程返回0
  2. 父进程返回子进程的 pid

(三)写实拷贝

通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自管理数据

(四)fork常规用法

  1. 一个父进程希望复制自己,使父子进程同时执行不同的代码段
  1. 一个进程要执行一个不同的程序(发生进程替换)

(五)fork调用失败的原因

  1. 系统中有太多的进程
  2. 实际用户的进程数超过了限制

2. 进程终止

(一)进程退出场景

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

(二)进程常见退出方法

  1. 正常终止(可以通过 echo $? 查看进程退出码 $? : 表示最近一次的进程退出时候的得到的退出码
  • 从main返回

main函数的返回值,本质表示:进程进行完成时,是否得到正确的结果,如果不是,可以用不同的数字代表不同的出错原因

  • 调用exit

exit : 中止一个进程

注意:

  1. exit 在任意一个位置被调用,表示进程直接退出
  2. return 在函数里面代表函数结束,在main函数里面代表进程退出

exit 使用

  • _exit

_exit : 中止一个进程

exit 和 _exit 的区别:

exit 执行时,会冲刷缓冲区的数据 (即可以看到数据刷新的结果)

_exit 执行时,不会冲刷缓冲区的数据

注意:

缓冲区在用户区

$? 的使用

return返回的是退出码,且子进程退出时得到的退出码会给父进程

第一个 echo $? 得到的退出码是执行 ./test 进程的

第二个 echo $? 得到的退出码是执行 上一个echo 进程的

. . .

注意:

系统提供的错误码和错误码描述的有对应关系的

错误码及对应的错误码描述

注意:

strerror 可以用过退出码得到退出码描述

errno 可以储存最近一次错误码

  1. 异常退出

ctrl + c,信号终止

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419171.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 调优篇1 类的加载器与加载过程

一 基本知识 1.1 JIT&AOT JIT: Just Time compilation 即时编译器 在程序运行时将字节码或中间表示转换为机器代码。 AOT: Ahead of Tmie Compilation : 预编译 在程序运行之前将高级语言代码完全编译成机器代码。 1.2 字面量和符号引用* 字面量&am…

逻辑代数的基本规则

目录 逻辑代数的基本规则 带入规则 反演规则 对偶规则 逻辑代数的基本规则 带入规则 将逻辑等式两边的某一变量均用同一个逻辑函数代替,等式仍然成立。 可以用A非代替A,也可以用C代替B。 也可使用BC这样一个整体代替B。 反演规则 可以把与换或&#x…

Mysql高级教程

1.安装部署 安装依赖性: [rootmysql-node10 ~]# dnf install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el7_4.x86_64.rpm rpcgen.x86_64 下载并解压源码包 [rootmysql-node10 ~]# tar zxf mysql-boost-5.7.44.tar.gz [rootmysql-no…

Java项目——苍穹外卖(一)

Entity、DTO、VO Entity(实体) Entity 是表示数据库表的对象,通常对应数据库中的一行数据。它通常包含与数据库表对应的字段,并可能包含一些业务逻辑。 DTO(数据传输对象) 作用:DTO 是用于在…

AutosarMCAL开发——基于EB Gpt驱动

目录 1.Gpt原理2.EB配置以及接口应用2.1 EB配置2.2 接口应用 3.总结 1.Gpt原理 autosar GPT模块(General Purpose Timer,通用定时器)主要用于汽车ECU中的时间测量、计数和产生定时中断。它支持单次性和周期性定时器,可以在达到预…

Bitvise——进入服务器的快捷方式

第一步:在连接进服务器后,点击左侧的保存配置文件,保存至桌面。 第二步:将保存的配置文件(后缀为 .tlp)打开方式改为bitvise。 第三步:双击配置文件(后缀为 .tlp)&#…

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管…

Android终端如何快速接入GB28181平台实现实时音视频回传

技术背景 GB28181是由中国国家标准委员会发布的基于IP网络的安防视频监控标准。Android平台GB28181设备对接模块,主要涉及到视频监控领域,可实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务&#xff0…

Ifream实现微前端效果

记得有人曾问过我,老旧的项目内容很多,项目卡,想要改造成类似微前端,领导想要快速,又不想系统重构、而且是不同子系统的协同,要怎么做?对方不想做太大的改造,所以想用ifream的方式动…

如何打造高效办公楼物业管理系统?Java SpringBoot+Vue架构详解,实现智能化管理,提升工作效率

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档17页成品论文保奖matla代码可视化图表等(后续会更新)「首先来看看目前已有的资料&#xff0…

Bat的退役前

我们很讨厌bat 语法这版的命令形式后缀尽管古老,可是在涉及细微VS 项目op 时候,它起到了不可忽视且非它不行的效应 我们不想替历史背上厚重的学习包袱,可是我们能忽视BAT 吗 如若进入到 无window时代,我们几乎得全然依仗BAT专家。…

Hiredis的使用

Hiredis的使用 📸这里安利一个github仓库介绍 图片生成 Socialify 一键生成专业 GitHub 仓库简介图 一、Hiredis的安装与使用 1、下载hiredis软件包, https://github.com/redis/hiredis.git 或者使用git下载到本地 git clone https://github.com/redi…

一文说清什么是数据仓库

01 数据仓库的概念 数据仓库的概念可以追溯到20世纪80年代,当时IBM的研究人员开发出了“商业数据仓库”。本质上,数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型。 目前对数据仓库(Data Warehouse)的标准定义&a…

51单片机-DS1302(RTC实时时钟芯片)

数据手册在主页资源免费贡献 开发板芯片数据手册 https://www.alipan.com/s/nnkdHhMGjrz 提取码: 95ik 点击链接保存,

算法分享——《双指针》

文章目录 ✅[《移动零》](https://leetcode.cn/problems/move-zeroes/)🌹题目描述:🚗代码实现:😴代码解析: ✅[《复写零》](https://leetcode.cn/problems/duplicate-zeros/)🌹题目描述&#xf…

Grafana 可视化配置

Grafana 是什么 Grafana 是一个开源的可视化和监控工具,广泛用于查看和分析来自各种数据源的时间序列数据。它提供了一个灵活的仪表盘(dashboard)界面,用户可以通过它将数据源中的指标进行图表化展示和监控,帮助分析趋…

Linux概述、远程连接、常用命令

Linux介绍 Linux操作系统介绍 Linux操作系统的特点 开源免费安全稳定可移植性好 Linux可以安装在不同的设备上 高性能 Linux的使用领域 应用服务器数据库服务器网络服务器虚拟化云计算嵌入式领域个人PC移动手机 Linux文件系统和目录 /:根目录,唯一/h…

flinkcdc 问题记录篇章

startupOptions 讲解 startupOptions 有三个参数initial、earliest、latest initial:因为binlog中不一定包含所有的数据,那么需要全表扫描所有的表,形成快照。常用于历史数据 earliest:从最早的变更日志开始读取(仅增…

linux下进行lvm分区及扩容

目录 LVM存储管理介绍 lvm磁盘扩容有两种方式 创建lvm磁盘 1. 首先先加入第一块儿新的磁盘 2. 对新磁盘 /dev/sdb 进行分区 通过LVM命令创建新卷 1. 创建物理卷 2.创建卷组 并将物理卷加入其中 3. 创建逻辑卷并分配大小 4.格式化刚刚创建的硬盘 5. 挂载磁盘 扩容lvm…