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

进程学习--02

        在C语言中,一般使用fork函数开辟进程,这个函数开辟进程后会返回一个进程号,在子进程中会返回0,在父进程中会返回子进程的进程号。

int main(){int ret = fork();if(ret<0){fprintf(stderr, "pid error");exit(-1);}else if(ret == 0){printf("this is son\n");}else if(ret>0){printf("this is father, son's pid is %d\n", ret);}return 0;
}
this is father, son's pid is 2700
this is son

        因为父进程为原始进程,而子线程需要新开辟,所以一般情况下父进程总是先进行下一步。

        当 fork() 被调用时,父进程和子进程共享相同的物理内存页,直到其中一个进程尝试修改这些页。当修改发生时,操作系统会为该页创建一个新的物理内存副本,并更新相应的页表,以确保每个进程都有自己的私有内存空间。这种技术大大减少了 fork() 的开销,因为大多数时候,子进程会立即执行 exec() 替换其内存映像,而无需修改父进程的内存。

        有开始就有退出,程序除了自然退出还可以使用exit和_exit函数退出。_exit直接使进程终止,清除其使用的内存空间,并清除其在内核中的各种数据结构。exit是在_exit上进行的封装,在此之上还增加了清理IO缓存等功能。

        在进程结束后往往需要回收进程,如果不回收进程,可能会导致一系列问题。在操作系统中,每个进程都会占用一定的系统资源,包括内存、CPU时间片等。当进程结束时,如果不进行回收,这些资源可能不会被正确释放,导致资源泄漏。资源泄漏会逐渐耗尽系统资源,影响系统的稳定性和性能。

        在Linux操作系统中,当进程结束时,操作系统会自动回收其占用的资源,确保系统资源的有效利用和管理的有效性。当一个进程正常或异常终止时,它会关闭所有打开的文件描述符,并释放其在用户空间分配的内存。这是进程在退出时自动完成的操作。然而,此时进程的进程控制块(PCB)仍然存在于内核中,其中保存了进程的状态信息,如退出状态、终止信号等。为了彻底清除进程并释放其占用的所有资源,需要其父进程进行回收操作。通过调用这些函数,父进程可以获取子进程的PCB信息,并进行清理工作,包括释放PCB占用的内存等。

        PCB是操作系统为管理进程而设置的一个专门的数据结构,用于记录进程的外部特征并描述其运动变化过程。它是系统感知进程存在的唯一标志,进程与PCB是一一对应的。PCB的大小取决于操作系统的实现和支持的功能,不同的操作系统和不同的进程可能有不同的PCB大小。PCB中主要包括以下信息:pid(进程标识符),进程状态,程序计数器(PC,用于记录下一条要执行的指令地址),寄存器值(保存进程在执行过程中的寄存器值),内存管理信息(记录进程的内存分配情况,包括代码段、数据段、堆栈等),文件描述符表,优先级,父进程标识符(PPID),子进程列表,信号处理器。此外,PCB还可能包含进程的控制信息,如进程当前状态、程序的外存地址、运行统计信息、进程间同步和通信等。以及资源管理信息,如占用内存的大小、输入/输出设备的设备号、缓冲区地址等。

        如果父进程没有回收子进程,子进程将成为僵尸进程。僵尸进程是一个已经终止但尚未被父进程回收的进程,它仍然占用进程表中的一个条目。为了避免僵尸进程的产生,通常建议在父进程中正确处理子进程的退出,并及时回收它们。当然如果父进程在子进程之前退出,子进程将成为孤儿进程。孤儿进程会被init进程(PID为1的进程)接管,并由init进程负责回收其资源。这是Linux系统的一种保护机制,确保即使父进程异常退出,子进程也能得到正确的处理。

        在Linux系统中我们可以使用ps来方便的查看进程的相关信息,ps -aux:

        在C程序中一般使用wait和waitpid等回收进程,前者是阻塞等待任意子进程结束,后者可以设定等待对应子进程已经等待方式。

相关文章:

进程学习--02

在C语言中&#xff0c;一般使用fork函数开辟进程&#xff0c;这个函数开辟进程后会返回一个进程号&#xff0c;在子进程中会返回0&#xff0c;在父进程中会返回子进程的进程号。 int main(){int ret fork();if(ret<0){fprintf(stderr, "pid error");exit(-1);}e…...

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…...

欧科云链做客Google Cloud与WhalerDAO专题论坛,畅谈Web3数据机遇

3月10日&#xff0c;由Google Cloud、WhalerDAO和baidao data主办&#xff0c;以Web3AI 2024 DATA POWER为主题的分享会在北京中关村举行。欧科云链高级研究员Jason Jiang受邀参加活动&#xff0c;带来“从链上数据发掘Web3时代的无限机遇”的主题分享。 Web3.0核心要素始终是链…...

计算机网络 TCP协议的流量控制

流量控制的功能就是让发送方的发送速率不要太快&#xff0c;以便让接收方来的及接受&#xff0c;因此可以说流量控制是一个速度匹配服务&#xff0c;匹配发送方的发送速率和接收方的读取速率。 TCP利用滑动窗口机制来实现流量控制&#xff0c;滑动窗口的基本原理是&#xff0c…...

【基于HTML5的网页设计及应用】——改变文字和背景颜色

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…...

面向对象编程第三式: 多态 (Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…...

[数据集][目标检测]草莓成熟度检测数据集VOC+YOLO格式412张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;412 标注数量(xml文件个数)&#xff1a;412 标注数量(txt文件个数)&#xff1a;412 标注类别…...

浅谈HTTP 和 HTTPS (中间人问题)

前言 由于之前的文章已经介绍过了HTTP , 这篇文章介绍 HTTPS 相对于 HTTP 做出的改进 开门见山: HTTPS 是对 HTTP 的加强版 主要是对一些关键信息 进行了加密 一.两种加密方式 1.对称加密 公钥 明文 密文 密文 公钥 明文 2.非对称加密 举个例子就好比 小区邮箱 提供一…...

JAVA八股文面经问题整理第3弹

文章目录 目录 文章目录 提问问题 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 问题9 问题10 问题11 问题12 问题13 问题14 问题15 问题16 问题17 问题18 写在最后 提问问题 JVM类加载机制&#xff1f;nginx怎么做到负载均衡&#xff1f;HashMap的红⿊树和扩容机制&…...

python 爬取人民新闻

基础信息获取&#xff1a; 要闻url&#xff1a;https://www.gov.cn/yaowen/liebiao/home.htm 下一页的url&#xff1a;https://www.gov.cn/yaowen/liebiao/home_1.htm 基础代码&#xff1a; import re import openpyxl import requests from lxml import etree import osdef …...

蓝桥杯刷题(九)

1.三国游戏 代码 #输入数据 nint(input()) Xlilist(map(int,input().split())) Ylilist(map(int,input().split())) Zlilist(map(int,input().split())) #分别计算X-Y-Z/Y-Z-X/Z-X-Y并排序 newXli sorted([Xli[i] - Yli[i] - Zli[i] for i in range(n)],reverseTrue) newYli …...

【NTN 卫星通信】 车辆物联网设备通过NTN和TN切换的应用场景

1 场景描述 对于有两个3GPP无线接入网服务的大面积农田和农场&#xff0c;物联网设备可以通过NTN和TN接入网同时受益于5G系统的双转向数据连接能力。   在这个用例中&#xff0c;我们有一个广域的农业自动化应用系统来控制农业车辆&#xff0c;例如&#xff0c;一个装有数百个…...

html5cssjs代码 014 布局框架

html5&css&js代码 014 布局框架 一、代码二、解释三、Bootstrap框架简介 Bootstrap 是一个流行的开源前端开发框架&#xff0c;它由Twitter公司&#xff08;后独立为Bootstrap团队&#xff09;创建并维护。Bootstrap 提供了一套现成的、响应式的用户界面组件和设计布局…...

[EFI]Lenovo Ideapad 530S-14IKB电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Lenovo Ideapad 530S-14IKB 处理器Intel i5 8250U✅已驱动内存8 GB DDR4 2400 MHz✅已驱动硬盘250 GB SSD M.2 PCI-E✅已驱动显卡Intel UHD Graphics 620✅已驱动声卡暂无更多详细信息✅已驱动网卡Realtek RTL8111✅已驱动无线网卡蓝牙DW1560 (BCM94352Z)…...

FFmpeg-aac、h264封装flv及时间转换

文章目录 时间概念流程api核心代码 时间概念 dts: 解码时间戳, 表示压缩帧的解码时间 pts: 显示时间戳, 表示将压缩帧解码后得到的原始帧的显示时间 时间基: time_base &#xff0c; 通常以ms为单位 时间戳: timestamp , 多少个时间基 真实时间&#xff1a;time_base * timest…...

TCP并发模型 || select || poll || epoll

TCP并发模型: 1.TCP多线程模型: 缺点: 1.创建线程会带来资源开销,能够实现的并发量比较有限 2.IO模型: 1.阻塞IO: 没有数据到来时,可以让任务挂起,节省CPU资源开销,提高系统效率 2.非阻塞IO: 程序未接收到数据时一直执行,效率很低 3…...

【开源】SpringBoot框架开发房屋出售出租系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预定意向模块2.4 交易订单模块 三、系统展示四、核心代码4.1 查询房屋求租单4.2 查询卖家的房屋求购单4.3 出租意向预定4.4 出租单支付4.5 查询买家房屋销售交易单 五、免责说明 一、摘…...

STM32的简单介绍

STM32是一种基于ARM Cortex-M内核的32位微控制器&#xff0c;由意法半导体公司开发和生产。STM32具有丰富的外设和功能&#xff0c;适用于各种应用场合&#xff0c;如工业控制、消费电子、物联网、人机交互等。STM32的优势包括低功耗、高性能、高可靠性、易于开发等。STM32的系…...

浏览器同源策略及跨域问题

同源策略&#xff1a;同源策略是一个重要的安全策略&#xff0c;它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。 同源策略的作用&#xff1a;保护浏览器中网站的安全&#xff0c;限制ajax只…...

【读书笔记】知识图谱概述

1、KG定义 1.1 背景知识 人工智能分为三个层次&#xff0c;分别是运算智能&#xff0c;感知智能和认知智能。运算智能是让机器能存会算&#xff1b;感知智能是让机器能听会说、能看会认&#xff1b;认知智能是解决机器能理解会思考的问题。由于知识图谱的数据组织方式是计算机…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...