西安高端网站制作/电脑培训网上免费课程
一、僵死进程
1.1僵死进程产生的原因
子进程先于父进程结束, 而父进程没有获取子进程退出码,释放子进程占用的资源,此时子进程将成为一个僵死进程。
在第一个框这里时父进程子进程都没有结束,显示其pid 父进程是2349,子进程是2350
在第二个框这里时父进程没有结束,子进程结束,因此显示父进程的pid,但是因为父进程没有获取子进程的退出码,子进程就处于僵死状态<defunct>
第三个框这里父进程结束,父进程成功获取子进程的退出码,子进程结束。
1.2 PCB消失的条件
获取到退出码,子进程要父进程获取子进程的退出码才能完全结束。
1.3危害
占用资源空间。如果进程不调用wait/waitpid,那么保留的那段信息就不会被释放,其进程号就会一 直被占用,但是系统能使用的进程号是有限的,如果产生大量的僵死进程,将因为没有可用的进程号而 导致系统不能产生新的进程。
1.4 如何处理
1.父进程调用wait()方法获取子进程的退出码
wait(&val):执行该指令,会将子进程的退出码填到val中。
结果:
这个时候我们不难发现:先打印的都是子进程,父进程一点都没有打印,当子进程结束才开始父进程,等val退出码打印后才开始。
原因:wait,即先阻塞父进程,直至子进程运行结束,父进程获取到子进程的退出码后,父进程才继续运行。
wait(&val):返回值pid_t,调用函数后会将退出码通过指针赋值到val上。
WIFEXITED(val):由于退出码为1字节,val为4字节,通过该函数可以将其转化为1字节,返回值为bool类型,判断进程是否正常结束。
WEXITSTATUS(val):获取进程退出状态。
2.父进程先结束----孤儿进程

结果
在父进程结束后出现了提示符,但是此时子进程还没有结束,所以还在执行
第一个框,父进程的id为2621,他的父进程是2135,子进程的id为2622,他的父进程为2621
父进程结束后,会随机为子进程分配一个父进程,该父进程的id为1536,收养了这个孤儿进程
注意:老版本是 init进程,其进程号为1,新版本是随机分配一个系统进程
init进程一定会对子进程执行wait()指令,获取子进程的退出码,子进程的pcb被操作系统删除,至此子进程彻底结束。
1.5 练习
1.5.1 练习一
结果
原因
板块一:此时i=0,执行fork语句生成板块2,打印第一个A,此时i++变成1,然后继续循环,执行fork语句,生成板块3(板块三的i是从1开始的),打印第二个A,i++变成2,结束板块一
板块三:因为是子进程,从fork语句后执行,打印第一个A,i++变成2,结束板块三
板块二:也是子进程,从fork语句后执行,打印第一个A,i++变成1,继续循环,执行fork语句生成板块四(板块四的i是从1开始的),打印第二个A,i++变成2,结束板块二。
板块四:也是子进程,打印第一个A,i++变成 2,结束板块2.
总计:6个A
1.5.2 练习二
结果
原因
注意一点:fork()执行完后,子进程从fork语句后执行
第一个板块:执行fork语句生成板2,此时将打印的A放在缓冲区,为什么呢?可以看下linux day06讲printf这块,此时i++变成1,继续循环,执行fork语句生成板块3,(注意板块三内容有原先父进程的缓冲区:A和i=1),然后执行printf,此时板块1的缓冲区中有AA两个,i++等于2,结束板块1.
第三个板块:因为复制了板块1的,i从1开始,直接执行printf语句,缓冲区有AA两个,i++变成2,j结束板块3.
第二个板块:因为是板块1的子进程,从printf处执行,缓冲区有一个A,i++等于1,继续for循环,执行fork语句形成板块4,然后缓冲区:AA,i++->2,结束板块2
第四个板块:因为复制了板块2,从printf处执行,缓冲区:AA,i++ ->2结束板块4
所以总计8个A
注意:练习一和练习二最大的区别在于缓存区的刷新
1.5.3 练习三
结果
原因
首先执行fork()||fork()语句,复制了一份,因为父进程的id>0,根据或语句特点直接结束,打印第一个A。然后子进程中0||fork(),或语句如果第一个为1 就直接跳过了,但是为0 就要继续执行后面语句,因此复制了一份代码,由于第二个fork()返回了当前父进程的id,直接结束语句,打印第二个A。最后子进程的pid为0,所以返回值为0,0||0为假,打印最后一个A结束整个程序,所以打印三个A
二、操作文件的系统调用
在C语言中有fopen,fclose等文件操作
头文件:#include<fcntl.h>
2.1 open()
文件已存在:int open(const char *pathname, int flags);
文件之前不存在,需要创建:int open(const char *pathname, int flags, mode_t mode);
pathname :将要打开的文件路径和名称flags : 打开标志,如 O_WRONLY 只写打开 O_RDONLY 只读打开O_RDWR 读写方式打开 O_CREAT 文件不存在则创建O_APPEND 文件末尾追加 O_TRUNC 清空文件,重新写入mode : 权限 如:“0600” 0是八进制,6是4 r+2 w返回值: 为文件描述符
2.2 read()
从文件中提取数据
ssize_t read( int fd, void * buf, size_t count);fd 对应打开的文件描述符buf 存放数据的空间count 计划一次从文件中读多少字节数据返回值 :为实际读到的字节数
2.3 write()
从文件中写入数据
ssize_t write( int fd, const void * buf, size_t count);参数介绍 :fd 对应打开的文件描述符buf 存放待写入的数据count 计划一次向文件中写多少数据
2.4 close()
关闭文件
int close( int fd);参数介绍 :fd 要关闭的文件描述符
2.5 举例
2.5.1 写文件
fd:文件描述符,通过编号id可以找到文件,0 标准输入,1标准输出,2标准错误输出
所以fd值为3
2.5.2 读文件
2.6 父进程先打开一个文件,fork 后子进程是否可以共享使用?
2.6.1 文件表
当不使用file.txt,把三关闭了,如果打开另外一个文件,则继续复用三。(不使用就关闭,这样就不会一直占用,使表不变大)
2.6.2 先open后fork
2.6.1.2 结果:
父进程打开的文件,子进程也可以访问,并且共享文件偏移量,如果想要关闭文件,需要父子进程都关闭文件。
2.6.1.3原因
父子进程共用一个结构体,引用计数为2,所以文件偏移量+1,那么子进程就输出d,再+1,父进程输出,所以结果出现四个偏移。
2.6.3 先fork后open
2.6.2.2 结果
2.6.2.3 原因
因为父和子进程各有一个结构体,打开一个文件,其偏移量并不互相影响,所以都是从a开始。
三、系统调用与库函数的区别
库函数的实现在函数库中,属于用户空间,系统调用的实现在内核中,属于内核空间。
相关文章:

Linux Day07
一、僵死进程 1.1僵死进程产生的原因 子进程先于父进程结束, 而父进程没有获取子进程退出码,释放子进程占用的资源,此时子进程将成为一个僵死进程。 在第一个框这里时父进程子进程都没有结束,显示其pid 父进程是2349,子进程是235…...
数字化管理,让MRO工业品更高效
MRO商品数字化是将MRO商品的采购、库存及记录过程进行数字化管理,以提高MRO商品的效率和可控性。MRO(Maintenance, Repair and Operations)一般用于维修、保养及日常运营工作中,包括五金工具、紧固件、精加工刀具、备品备件、切屑…...

layui中渲染table表格
页面布局 可直接根据文档要求去写 table 组件(这个不重要) <table lay-filter"SyDictTable" id"SyDictTable" lay-data"{id: SyDictTable}"></table>Js 重要的是去修改JS里面的东西,比如&#…...

2023-08-10LeetCode每日一题(下降路径最小和 II)
2023-08-10每日一题 一、题目编号 1289. 下降路径最小和 II二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 n x n 整数矩阵 grid ,请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为:从 grid 数组中的每一行选择一个数…...

网络基础2(HTTP,HTTPS,传输层协议详解)
再谈协议 在之前利用套接字进行通信的时候,我们都是利用 “字符串” 进行流式的发送接收,但是我们平常进行交流通信肯定不能只是简单的发送字符串。 比如我们用QQ进行聊天,我们不仅需要得到对方发送的消息,还要知道对方的昵称&…...

Java实现籍贯级联选择器
在工作中要求写一个籍贯的级联选择器,记录一下自己写这个级联选择器的过程,因为自己才刚开始工作,有很多地方都没有考虑的很清楚,希望各位大佬能给出建议。 一、需求 A:正常的23个省,籍贯由“省区/县/市”组成…...

每日一学——OSI参考模型
OSI参考模型(Open Systems Interconnection Reference Model)是国际标准化组织(ISO)制定的一个网络通信协议的概念框架。它将网络通信划分为七个层次,每个层次负责不同的功能和任务,从物理层到应用层依次为…...

虚幻5中Lumen提供哪些功能以及如何工作的
虚幻引擎 5 中的 Lumen 是一个完全动态的全局照明和反射系统。它可以在虚幻引擎 5 中使用,因此创作者无需自行设置。它是为下一代控制台和建筑可视化等高端可视化而设计的。那么它提供了哪些功能以及如何工作? 全局照明 当光离开光源时,它会…...

Linux C 语言 mosquitto 方式 MQTT 发布消息
1 说明 采用 mosquitto 库,实现对主题发布消息。 其中服务器有做限制,需要对应的 cilent id ,cafile 、certfile 、keyfile 等配置 2 开发环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev sudo apt-ge…...

利用NtDuplicateObject进行Dump
前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。(本文仅用于交流学习) 这是国外老哥2020年提出的一种蛮有意思的思路。 我们先来看看大致的思路是…...

【快应用】list组件如何区分滑动的方向?
【关键词】 list组件、滑动方向、scroll 【问题背景】 有cp反馈list这个组件在使用的时候,不知道如何区分它是上滑还是下滑。 【问题分析】 list组件除了通用事件之外,还提供了scroll、scrollbottom、scrolltop、scrollend、scrolltouchup事件&#x…...

【深入了解pytorch】PyTorch扩展:如何使用PyTorch的扩展功能
【深入了解pytorch】PyTorch扩展:如何使用PyTorch的扩展功能 PyTorch扩展:展示如何使用PyTorch的扩展功能1. 自定义损失函数2. 自定义数据加载器3. 自定义优化器总结PyTorch扩展:展示如何使用PyTorch的扩展功能 PyTorch作为一个开源的深度学习框架,在研究和应用领域广受欢…...

Vue3——如何实现页面访问拦截
在现代的Web开发中,页面访问拦截是一个非常常见的需求。通过拦截页面访问,我们可以控制用户在访问特定页面之前需要满足的条件,比如登录状态、权限等。Vue是一个非常流行的JavaScript框架,它提供了许多强大的工具和功能࿰…...

nginx配置gzip
在 Nginx 中启用 Gzip 压缩可以大幅减少传输内容的大小,从而加快网页加载速度。 打开 Nginx 的配置文件,通常是 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/default.conf。找到 http 配置块,在其中添加以下代码来开启 Gzip 压缩ÿ…...

ExtJS教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Ext JS是一个流行的JavaScript框架,它为使用跨浏览器功能构建Web应用程序提供了丰富的UI。 Ext JS基本上用于创建桌面应用程序它支持所有现代浏览器,如IE6 ,FF,Chrome,safari 6 等。Ext JS基于MVC / MVVM架构…...

【el-upload】批量上传图片时在before-upload中添加弹窗判断时的踩坑记录
一、初始代码 1. 初始使用组件代码片段 <!-- 上传 --> <DialogUploadFile ref"uploadFile" success"refresh" />// 上传 const uploadHandle () > {if (selections.value.length ! 1) {onceMessage.warning(请选择一条数据操作)return}u…...

【Java基础】- JVM之Dump文件详解
Java基础 - JVM之Dump文件详解 文章目录 Java基础 - JVM之Dump文件详解一、什么是Dump三、为什么需要Dump分析思路 四、Dump记录哪些内容4.1 Java dump 文件的格式和内容段格式行格式 4.2 常用分类heap dump和thread dumpheap dumpthread dump 五、如何生产Dump文件5.1 获取hea…...

基于Vue+wangeditor实现富文本编辑
目录 前言分析实现具体解决的问题有具体代码实现如下效果图总结前言 一个网站需要富文本编辑器功能的原因有很多,以下是一些常见的原因: 方便用户编辑内容:富文本编辑器提供了类似于Office Word的编辑功能,使得那些不太懂HTML的用户也能够方便地编辑网站内容。提高用户体验…...

深入理解 Spring 中的 @RequestBody 和 @ResponseBody 注解及其区别
引言 在现代的 Web 开发中,处理 HTTP 请求和响应是不可或缺的任务。Spring Framework 提供了丰富的功能来简化这些任务,并使开发人员能够更专注于业务逻辑。在本文中,我们将深入探讨 Spring 中的 RequestBody 和 ResponseBody 注解࿰…...

【论文阅读】EULER:通过可扩展时间链接预测检测网络横向移动(NDSS-2022)
作者:乔治华盛顿大学-Isaiah J. King、H. Howie Huang 引用:King I J, Huang H H. Euler: Detecting Network Lateral Movement via Scalable Temporal Graph Link Prediction [C]. Proceedings 2022 Network and Distributed System Security Symposium…...

手动创建一个DOCKER镜像
1. 我们先使用C语言写一个hello-world程序 vim hello.c # include <stdio.h>int main() {print("hello docker\n"); } 2. 将hello.c文件编译成二进制文件, 需要安装工具 yum install gcc yum install glibc-static 开始编译 gcc -static hello.c -o hello 编译…...

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[一]
文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能01-搭建Vue 前端工程需求分析/图解代码实现搭建Vue 前端工程下载node.js LTS 并安装: node.js 的npm创建Vue 项目使用idea 打开ssm_vue 项目, 并配置项目启动 Vue3 项目目录结构梳理Vue3 项目结构介绍 配置Vue 服务端口El…...

Idea使用Docker插件实现maven打包自动构建镜像
Docker 开启TCP 服务 vi /lib/systemd/system/docker.service改写以下内容 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock重启服务 #重新加载配置文件 systemctl daemon-reload #重启服务 systemctl restart docker.service此时docker已…...

Tailwind css优于Bootstrap 7个原因
在某些情况下,Tailwind css 比 Bootstrap 更好,因为它是一个低级 CSS 框架,可让您根据需要构建自己的自定义组件。如果使用得当,它非常注重性能,可以显着减少 CSS 负载并确保更快的渲染。如果 Web 性能和自定义是您的首…...

IDEA简单拷贝一份新项目记录
IDEA简单拷贝项目记录 拷贝后改项目名,然后iml 配置文件改项目名,然后 .idea 中的compiler.xml 里面的name标签改项目名。 就可以了...

华为OD真题--字符串加密
2023华为OD统一考试(AB卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新) "给你一串未加密的字符串str,通过对字符串的每一个字母进行改变来实现加密…...

UML-状态图
目录 状态图 状态图的图符 状态机 状态 转换 电话机状态图 活动图和状态图区别: 状态图 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态…...

chrome插件开发实例07- Vue调试插件vue-devtools
目录 一、为什么使用vue-devtools插件 二、如何安装 三、使用源码方式,安装Vue-devtools插件...

HTML <span> 标签
定义和用法 <span> 标签被用来组合文档中的行内元素。 浏览器支持 元素ChromeIEFirefoxSafariOpera<span>YesYesYesYesYes所有浏览器都支持 <span> 标签。 HTML 与 XHTML 之间的差异 NONE 提示和注释: 提示:请使用 <span> 来组合行内元素,以便…...

【PythonGIS】Python处理矢量数据的基本操作(查询、修改、删除、新建)
ogr库是一个处理地理空间矢量数据的开源库。它可以读取多种数据格式,进行地理处理、属性表操作、数据分析等操作。目前ogr和osr库已集成到GDAL库中,可以对栅格数据、矢量数据进行处理分析,被3S的研究人员广泛应用。感兴趣的可以自己去了解一下…...