进程控制

news2024/10/3 0:35:23

文章目录

  • 进程控制
    • 子程序与父程序区别
    • 进程创建
    • 进程终止
    • 进程等待
    • 进程替换

进程控制

多进程是程序进行的基本功能,所需要进行基础控制的操作。用来减少因为单核性能不足的原因造成的系统卡死。

子程序与父程序区别

完全继承父进程相关的内存块和数据块,拷贝到子进程。

完全继承父进程相关的内存块和数据块,拷贝到子进程。
(如果有不同的地方就不与父进程使用相同一个内存的,f子进程与父进程共同拥有同一块地方)

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

当其中的一方的试图进行写入,就需要进行拷贝构造一本的副本。

进程创建

image-20230227155748382

错误返回-1,父亲进程返回子进程id,子进程返回0;(可以利用这个进行子进程的使用,if进行判断是非处于子进程还是父进程进行程序的执行)

使用fork进行子进程进行创建

pia_t if = fork();
if(0 == id){
 //代码(子进程)
}

创建失败的原因:进程过多,导致进程错误。

进程终止

直接使用exit或者_eixt进行进程退出。

exit刷新缓冲区然后退出线程,就是将所有的在缓冲区的东西全部清除,然后缓冲区没有任何的东西。

exit(n)的退出相当与turn n;的基本操作相同。而且exit还会返回退出码。(这个对于进程等待后面获取进程退出码有非常多的作用)。

image-20230228162100443


僵尸进程:而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。

孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为1)所收养,并由 init 进程(OS系统)对它们完成状态收集工作。

  • 僵尸进程: 一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。

进程等待

子进程被退出之后还要相关的数据需要清除,如果相关的数据 (包括进程号 the process ID,退出状态,运行时间)长时间没有被清除,可能造成内存等相关的问题,上面(前面一段的相关内容)讲述的相关的问题。需要使用相关的东西解决这个问题。

int *status为输出型参数,获取进程退出码的参数。进行exit(n)或者_exit(n)其中的n。如果不需要返回的退出码, 直接书写为nullptr。

返回值pid_t 为进程的id,退出失败为-1(类似的函数都是返回-1)

IMG_9D17D4B3EDCA-1

int option决定等待的方式,pid_t决定不同的进程

optin一共有4个相应的选项,但是常用的只有其中的两个。一个是0基本上与wait的参数使用的东西相同(非阻塞示等待)如果option被填写为WNOHANG,就为阻塞示等待。

填写成为0为非阻塞示等待,基本使用方法与wait相同。

填写为WNOHANG阻塞示等待,其如果进程pid_t pid为具体的某一个进程id,需要等待子进程结束之后才返回进程id。如果是pid_t设置-1, 只要有子进程退出,就返回子进程的id。 没有子进程退出,就返回0。


前面获取的status的参数使用了位图的形式储存相关的东西,不同的退出方式有不同的退出码。

image-20230301115752648

因为处理过程之中会发生一些位图的相关操作,不好进行,所以使用函数进行处理这一个数据

image-20230301120422862

进程替换

通过进程替换可跑其他语言的程序在子进程之中,因此引进来相应的函数进行相关的操作。这个过程之中

image-20230301140334026

这里采用之间替换命令,或者直接进行搜索的功能。

这里的列表表示的许多使用’‘,’'管理起来的东西。数组是指得存在相关字母的字符数组。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工具插件类教学】UnityPackageManager私人定制资源工具包

目录 一.UnityPackageManager的介绍 二.package包命名 三.包的布局 四.生成清单文件 五.制作package内功能 六.为您的软件包撰写文档 1.信息的结构 2.文档格式 七.提交上传云端仓库 1.生成程序集文件 2.上传至云端仓库 八.下载使用package包 1.获取包的云端路径 …

Arduino IDE启动闪退或者运行中闪退

文章目录一、你中了哪一种?1、安装了不符合规格的库文件2、安装了不符合规范的开发板库文件二、解决方案1、轻方案2、全盘重来Arduino IDE启动闪退或者运行中闪退,出现这样的问题,其实不需要思考了,就是运行库配置的问题&#xff…

clion在linux设置桌面启动图标(jetbrains全家桶均适用)

clion在linux设置桌面启动图标(jetbrains全家桶均适用) 网上大部分步骤都只是pycharm的教程,其实对于jetbrains全家桶都适合,vs code编辑器也可以这样。 刚开始是使用pycharm在linux设置的教程,参照:http…

计算机组成原理4小时速成3:存储器,主存ROM,RAM,cache高速缓存,辅存外设,地址编址方案,汉明码检错纠错

计算机组成原理4小时速成3:存储器,主存ROM,RAM,cache高速缓存,辅存外设,地址编址方案,汉明码检错纠错 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,…

CSS-Grid(网格)布局

前言 之前HTML 页面的布局基本上都是通过 Flexbox 来实现的,能轻松的解决复杂的 Web 布局。 现在又出现了一个构建 HTML 最佳布局体系的新竞争者。就是强大的CSS Grid 布局。 grid和flex区别是什么?适用什么场景? Flexbox 是一维布局系统&am…

js几种对象创建方式

适用于不确定对象内部数据方式一:var p new Object(); p.name TOM; p.age 12 p.setName function(name) {this.name name; }// 测试 p.setName(jack) console.log(p.name,p.age)方式二: 对象字面量模式套路:使用{}创建对象,同…

chatgpt 到底颠覆了什么 第一部分

ChatGPT一出来,一堆搞NLP的立马哭了。为什么?不该问为什么哭,而该问为什么还不哭。 有两个立马大哭的理由。 第一个理由很多人说了,范式改变。 虽然说没有哪个研究领域,甚至没有哪个领域敢说自己真的是天道酬勤绝对公平…

自己第一次在虚拟机完整部署ssm项目心得体会

过程使用资源和博文 琳哥发的linux课件文档,阳哥发的linux课件文档(私聊我要) https://www.likecs.com/show-205274015.html https://www.cnblogs.com/aluoluo/articles/15845183.html https://blog.csdn.net/osfipin/article/details/54405445 https://blog.csdn.net/drea…

【封装xib补充 Objective-C语言】

一、那么首先,咱们就从这个结果来分析 1.就不给大家一步一步分析了,直接分析我们这里怎么想的, 首先,我们看到这样的一个界面,我们想,这些应用数据是不是来源于一个plist文件吧, 所以说,我们首先要,第一步,要懒加载,把这个plist文件中的数据,加载起来, 那么,因…

超详细MySQL(免安装版)安装与配置

一、MySQL下载 首先打开MySQL官网,官网首页地址为 MySQL官网首页地址 进入官网后如下图所示,点击DOWNLOADS进入下载页面 下滑页面找到MySQL Community(GPL)Downloads>>并点击 接下来点击MySQL Community Server 若想要安…

C语言数组【详解】

数组1. 一维数组的创建和初始化1.1 数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储2. 二维数组的创建和初始化2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储3. 数组越界4. 数组作为函数参数4.1 冒泡排序函数…

java 学习3(数组)

java ——数组 ✍作者:电子科大不知名程序员 🌲专栏:java学习指导 各位读者如果觉得博主写的不错,请诸位多多支持;如果有错误的地方,欢迎在评论区指出 数组是一组相同类型元素按一定顺序排列的集合 数组相…

[MatLab]变量与数据结构

在开始工程之前,需要先指定工程目录,按住下图红框按钮进行选择。 Matlab分为编辑器和命令窗口,编辑器用来编写代码文件,而命令窗口可以实时交互。 在窗口中输入clc即可清除命令窗口;clear all可以清除工作区中所有变量…

【论文笔记】Long Tail Learning via Logit Adjustment

摘要 Our techniques revisit the classic idea of logit adjustment based on the label frequencies, either applied post-hoc to a trained model, or enforced in the loss during training. Such adjustment encorages a large relative margin between logits of rare …

项目管理系统的设计与实现

技术:Java、JSP等摘要:企业项目管理系统是为了使企业项目能够按照预定的成本、进度、质量顺利完成,而对人员、产品、过程和项目进行分析和管理的活动,系统主要包括项目基本信息操作、项目规划管理,合同管理&#xff0c…

一步一步教你如何使用 Visual Studio Code 编译一段 C# 代码

以下是一步一步教你如何使用 Visual Studio Code 编写使用 C# 语言输出当前日期和时间的代码: 1、下载并安装 .NET SDK。您可以从 Microsoft 官网下载并安装它。 2、打开 Visual Studio Code,并安装 C# 扩展。您可以在 Visual Studio Code 中通过扩展菜…

VMware NSX 4.1 发布 - 网络安全虚拟化平台

请访问原文链接:VMware NSX 4 - 网络安全虚拟化平台,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org VMware NSX 提供了一个敏捷式软件定义基础架构,用来构建云原生应用程序环境。NSX 专注于为具有异…

【SPSS】两配对样本T检验分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【微服务】-认识微服务

目录 1.1 单体、分布式、集群 单体 分布式 集群 1.2 系统架构演变 1.2.1 单体应⽤架构 1.2.2 垂直应⽤架构 1.2.3 分布式架构 1.2.4 SOA架构 1.2.5 微服务架构 1.3 微服务架构介绍 微服务架构的常⻅问题 1.4 SpringCloud介绍 1.4.1 SpringBoot和SpringCloud有啥关…

【Flutter入门到进阶】Flutter基础篇---介绍与环境

1 Flutter介绍 Flutter是谷歌公司开发的一款开源、免费的UI框架,可以让我们快速的在Android和iOS上构建高质量 App。它最大的特点就是跨平台、以及高性能。 目前 Flutter 已经支持 iOS、Android、Web、Windows、macOS、Linux等。 Flutter基于谷歌的dart语言&#…