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

进程与子进程

一、子进程

1.fork()创建子进程

  一个现有的进程可以调用 fork()函数创建一个新的进程,调用 fork()函数的进程称为父进程,由 fork()函数创建出来的进程被称为子进程(child process)。(使用该函数需要包含头文件<unistd.h>)

2.创建的子进程为新的独立的进程,与父进程地位相等。但父子进程之间也有些相同点,子进程拷贝了父进程的数据段、堆、栈以及继承了父进程打开的文件描述符。对于程序来说,子进程和父进程共享代码段,在内存中只存在一份代码段数据。

3.子进程和父进程之间存在竞争关系,可以通过信号来指定它们的执行顺序。fork()函数调用完成之后,父进程、子进程会各自继续执行 fork()之后的指令,最终父进程会执行到 exit()结束进程,而子进程则会通过_exit()结束进程。

二、进程的诞生与终止

  事实上,Linux系统下的所有进程都是由其父进程创建而来,譬如在 shell 终端通过命令的方式执行一个程序./app,那么 app进程就是由 shell 终端进程创建出来的,shell 终端就是该进程的父进程。

  进程号为 1 的进程便是所有进程的父进程,通常称为 init 进程,它是 Linux 系统启动之后运行的第一个进程,它管理着系统上所有其它进程,init 进程是由内核启动,因此理论上说它没有父进程。

三、监视子进程

  在很多应用程序的设计中,父进程需要知道子进程于何时被终止,并且需要知道子进程的终止状态信息,是正常终止、还是异常终止亦或者被信号终止等,意味着父进程会对子进程进行监视。

  wait()函数可以等待进程的任一子进程终止,同时获取子进程的终止状态信息。

四、僵尸进程与孤儿进程

 1.孤儿进程

  父进程先于子进程结束,init进程会自动成为孤儿进程的父进程。

 2.僵尸进程

  如果子进程先于父进程结束,此时父进程还未来得及给子进程“收尸”或者没有收尸的操作,那么此时子进程就变成了一个僵尸进程。

  需要注意的是,僵尸进程是无法通过信号将其杀死的,即使是“一击必杀”信号 SIGKILL 也无法将其杀死,那么这种情况下,只能杀死僵尸进程的父进程(或等待其父进程终止),这样 init 进程将会接管这些僵尸进程,从而将它们从系统中清理掉!所以,在我们的一个程序设计中,一定要监视子进程的状态变化,如果子进程终止了,要调用 wait()将其回收,避免僵尸进程。

  3.SIGCHLD 信号

  当子进程终止时和因收到信号而停止或恢复时,父进程会收到SIGCHLD信号。我们要捕获它、绑定信号处理函数,在信号处理函数中调用 wait()收回子进程,回收完毕之后再回到父进程自己的工作流程中。

  注意:父进程一次只能捕获一个SIGCHLD信号,如果有多个子进程终止发出信号,而父进程来不及为子进程收拾或者错过了就会有僵尸进程成为“漏网之鱼”。解决办法:在 SIGCHLD 信号处理函数中循环以非阻塞方式来调用 waitpid(),直至再无其它终止的子进程需要处理为止。

  4.子进程执行新程序

  当子进程不再执行父进程的代码段,而是运行新的程序代码,此时会通过系统调用execve函数来实现。

  通常将调用这些 exec 函数加载一个外部新程序的过程称为 exec 操作。

相关文章:

进程与子进程

一、子进程 1.fork()创建子进程 一个现有的进程可以调用 fork()函数创建一个新的进程&#xff0c;调用 fork()函数的进程称为父进程&#xff0c;由 fork()函数创建出来的进程被称为子进程&#xff08;child process&#xff09;。&#xff08;使用该函数需要包含头文件<uni…...

如何对MySQL和MariaDB中的查询和表进行优化-提升查询效率

前言 MySQL和MariaDB是数据库管理系统的流行选择。两者都使用SQL查询语言来输入和查询数据。 尽管SQL查询是简单易学的命令&#xff0c;但并不是所有的查询和数据库函数都具有相同的效率。随着你存储的信息量的增长&#xff0c;如果你的数据库支持一个网站&#xff0c;随着网…...

【Android】关于binder_calls_stats服务

Android 9上有了binder_calls_stats服务&#xff0c;提供了java层的binder统计&#xff0c; Android中的Binder Call Stats&#xff08;Binder调用统计&#xff09;是一项用于监控和记录Android系统中Binder通信的统计信息的功能。Binder是Android中的一种进程间通信&#xff…...

给前端返回http链接,由于浏览器缓存不能获取到最新资源怎么办?

1、问题描述 今天在工作中接到这样一个需求&#xff0c;接收前端的图片文件并上传到远程&#xff0c;将原有图片覆盖并返回一个http链接以供前端展示。用户使用后反馈没有修改成功&#xff0c;上了远程拉图片发现已经修改了&#xff0c;但是用户浏览器还是老的图片。排查原因是…...

【Java Web】检查用户登录状态,防止用户访问到非法页面

使用拦截器 在方法前标注自定义注解拦截所有请求&#xff0c;只处理带有该注解的方法 自定义注解&#xff1a; 常用元注解&#xff1a;Target, Rentention, Document, Inherited如何读取注解&#xff1a; - Method.getDeclaredAnnotations() - Method.getAnnotaion(Class<T&…...

数学建模——校园供水系统智能管理

import pandas as pd data1pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx") data2pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx") data3pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx") data4…...

分布式集群——搭建Hadoop环境以及相关的Hadoop介绍

系列文章目录 分布式集群——jdk配置与zookeeper环境搭建 分布式集群——搭建Hadoop环境以及相关的Hadoop介绍 文章目录 前言 一 hadoop的相关概念 1.1 Hadoop概念 补充&#xff1a;块的存储 1.2 HDFS是什么 1.3 三种节点的功能 I、NameNode节点 II、fsimage与edits…...

Python的os.walk()函数使用案例

在Python中&#xff0c;os模块是一个非常实用的工具&#xff0c;它可以让我们与操作系统进行交互&#xff0c;操作文件和目录。在本文中&#xff0c;我们将详细介绍os模块中的遍历文件功能&#xff0c;并通过具体案例和使用场景来解释。 首先&#xff0c;导入os模块。在Pytho…...

学习JAVA打卡第四十五天

StringBuffer类 StringBuffer对象 String对象的字符序列是不可修改的&#xff0c;也就是说&#xff0c;String对象的字符序列的字符不能被修改、删除&#xff0c;即String对象的实体是不可以再发生变化&#xff0c;例如&#xff1a;对于 StringBuffer有三个构造方法&#xff…...

创建K8s pod Webhook

目录 1.前提条件 2.开始创建核心组件Pod的Webhook 2.1.什么是Webhook 2.2.在本地k8s集群安装cert-manager 2.3.创建一个空的文件夹 2.4. 生成工程框架 2.5. 生成核心组件Pod的API 2.6.生成Webhook 2.7.开始实现Webhook相关代码 2.7.1.修改相关配置 2.7.2.修改代码 2…...

抓包-要抓取Spring Boot应用程序的请求

要抓取Spring Boot应用程序的请求&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 确保你已经按照之前提到的方法设置了Charles代理&#xff0c;并在Charles的SSL代理设置中添加了Spring Boot应用程序的域名。 2. 在Spring Boot应用程序的代码中&#xff0c;添加以下配…...

jmeter+nmon+crontab简单的执行接口定时压测

一、概述 临时接到任务要对系统的接口进行压测&#xff0c;上面的要求就是&#xff1a;压测&#xff0c;并发2000 在不熟悉系统的情况下&#xff0c;按目前的需求&#xff0c;需要做的步骤&#xff1a; 需要有接口脚本需要能监控系统性能需要能定时执行脚本 二、观察 >针…...

ZooKeeper基础命令和Java客户端操作

1、zkCli的常用命令操作 &#xff08;1&#xff09;Help &#xff08;2&#xff09;ls 使用 ls 命令来查看当前znode中所包含的内容 &#xff08;3&#xff09;ls2查看当前节点数据并能看到更新次数等数据 &#xff08;4&#xff09;stat查看节点状态 &#xff08;5&#xf…...

【数据分享】2000-2020年全球人类足迹数据(无需转发\免费获取)

人类足迹(Human Footprint)是生态过程和自然景观变化对生态环境造成的压力&#xff0c;是世界各国对生物多样性和生态保护的关注重点。那如何才能获取长时间跨度的人类足迹时空数据呢&#xff1f; 之前我们分享了来自于中国农业大学土地科学与技术学院的城市环境监测及建模&am…...

基于机器学习的fNIRS信号质量控制方法

摘要 尽管功能性近红外光谱(fNIRS)在神经系统研究中的应用越来越广泛&#xff0c;但fNIRS信号处理仍未标准化&#xff0c;并且受到经验和手动操作的高度影响。在任何信号处理过程的开始阶段&#xff0c;信号质量控制(SQC)对于防止错误和不可靠结果至关重要。在fNIRS分析中&…...

分布式锁的三种实现方式是什么?

分布式锁三种实现方式&#xff1a; 基于数据库实现分布式锁&#xff1b;基于缓存&#xff08;Redis等&#xff09;实现分布式锁&#xff1b;基于Zookeeper实现分布式锁&#xff1b; 一&#xff0c; 基于数据库实现分布式锁 悲观锁 利用select … where … for update 排他锁…...

华为云软件精英实战营——感受软件改变世界,享受Coding乐趣

机器人已经在诸多领域显现出巨大的商业价值&#xff0c;华为云计算致力于以云助端的方式为机器人产业带来全新机会 如果您是开发爱好者&#xff0c;想了解华为云&#xff0c;想和其他自由开发者交流经验&#xff1b; 如果您是学生&#xff0c;想和正在从事软件开发行业的大佬…...

贪心算法总结篇

文章转自代码随想录 贪心算法总结篇 我刚刚开始讲解贪心系列的时候就说了&#xff0c;贪心系列并不打算严格的从简单到困难这么个顺序来讲解。 因为贪心的简单题可能往往过于简单甚至感觉不到贪心&#xff0c;如果我连续几天讲解简单的贪心&#xff0c;估计录友们一定会不耐…...

ICCV 2023 | 港中文MMLab: 多帧光流估计模型VideoFlow,首次实现亚像素级别误差

本文提出了一个多帧光流估计模型 VideoFlow&#xff0c;旨在充分挖掘视频中的时序信息和运动规律&#xff0c;避免当前主流方法只以两帧图片作为输入而面临的信息瓶颈&#xff0c;显著提升了光流估计的性能。 在公开的 Sintel Bechmark 上&#xff0c;VideoFlow 在 Clean 和 Fi…...

【python爬虫】—图片爬取

图片爬取 需求分析Python实现 需求分析 从https://pic.netbian.com/4kfengjing/网站爬取图片&#xff0c;并保存 Python实现 获取待爬取网页 def get_htmls(pageslist(range(2, 5))):"""获取待爬取网页"""pages_list []for page in pages:u…...

Gemma-3-12b-it Streamlit应用实战:顶部像素控制面板CSS3定制详解

Gemma-3-12b-it Streamlit应用实战&#xff1a;顶部像素控制面板CSS3定制详解 1. 引言&#xff1a;从传统侧边栏到像素控制面板 如果你用过Streamlit&#xff0c;肯定对那个默认的侧边栏不陌生。它很方便&#xff0c;但有时候也挺碍事——特别是当你想要一个全屏、沉浸式的对…...

仅用200行代码重构内存管理模块:某AI平台将GPU服务器月成本压至$1,840的独家策略(限时开源)

第一章&#xff1a;Python 智能体内存管理策略Python 的内存管理并非由开发者直接操控&#xff0c;而是由解释器内置的智能体协同完成——包括引用计数、循环垃圾回收器&#xff08;GC&#xff09;和内存池机制三者构成动态平衡系统。这一“智能体”在运行时持续感知对象生命周…...

【C++27范围库前瞻实战指南】:20年标准库专家亲授5大扩展接口的工业级应用模式

第一章&#xff1a;C27范围库扩展全景概览C27 将对标准范围库&#xff08;Ranges&#xff09;进行实质性增强&#xff0c;聚焦于提升表达力、运行时效率与编译期元编程能力。核心演进方向包括惰性求值语义强化、范围适配器的定制化组合机制、对异步与并行范围操作的原生支持&am…...

手把手搓FPGA版W5500三合一驱动

FPGA W5500 3合一 驱动 UDP、TCP客户端、TCP服务端三合一&#xff0c;8个SOCKET都可用源代码&#xff0c;SPI时钟80m,无时序问题&#xff0c;上手即用 硬件实测&#xff0c;高速、稳定 verilog编写&#xff0c;纯逻辑实现 这块W5500芯片的驱动在项目里被我折腾了半个月&#xf…...

STM32智能灌溉系统设计与实现

1. 项目概述这个智能灌溉控制系统是我去年为一个农业科技公司做的实际项目&#xff0c;当时他们需要在200亩的蓝莓种植基地部署一套自动化灌溉方案。经过三个月的开发和实地测试&#xff0c;最终形成了这套基于STM32的稳定系统。现在把整个设计过程整理出来&#xff0c;希望能给…...

极空间玩出花!用 File Browser 搭建专属私有云,文件管理超丝滑

前言 玩 NAS 的朋友应该都懂&#xff0c;极空间的硬件确实够稳&#xff0c;但原生的文件管理功能总差那么点意思 —— 权限管控不精细、跨设备操作不够顺手&#xff0c;想把它打造成真正的私人网盘总差点火候。 直到我试了 File Browser&#xff0c;这款轻量又强大的开源 Web…...

【HALCON】test_subset_region算子实战:从原理到工业质检的精准区域嵌套检测

1. test_subset_region算子的核心原理与工业价值 在工业质检场景中&#xff0c;判断一个区域是否完全包含在另一个区域内&#xff0c;就像检查螺丝是否准确拧进了螺孔。HALCON的test_subset_region算子就是专门解决这类问题的"智能卡尺"。它的底层逻辑其实非常直观—…...

【openbmc8】mctp pldm

文章目录 1.mctp协议 1.1 mctp通用报文 1.2 mctp over i2c packet format 2.驱动分析 2.1 mctp pcie vdm 2.1 用户层操作代码流程 2.2 用户层操作测试 3.dbus适配 1.mctp协议 1.1 mctp通用报文 谁分配EID谁就是bus owner。mctp建立关联后都用EID(类似ip地址)通信:下图最后…...

AI能力已经成为2026年的分水岭:2026年企业如何选对人力资源管理平台

HR SaaS系统是基于云端部署的人力资源管理软件&#xff0c;帮助企业实现招聘、人事、绩效、薪酬等HR业务的数字化管理。2026年的HR SaaS已经从传统的流程工具进化为AI驱动的智能管理平台&#xff0c;能够自动处理简历筛选、智能推荐人才、生成绩效面谈纪要等复杂任务&#xff0…...

UEFI开发实战指南 – 从环境搭建到国产平台适配

1. UEFI开发环境搭建全攻略 第一次接触UEFI开发时&#xff0c;我被各种陌生的术语搞得晕头转向。经过几个实际项目的摸爬滚打&#xff0c;终于摸清了门道。UEFI开发环境的搭建其实就像搭积木&#xff0c;只要掌握关键步骤&#xff0c;新手也能快速上手。 在Windows系统下搭建环…...