3.13-进程

进程

进程和程序

  • 程序:编译好的二进制文件,不占用系统资源(内存)。
  • 进程:活跃的程序,不消耗系统图资源(内存)。

MMU

PCB 进程控制块

  • 本质:结构体:struct task_struct { … }
  • 大致内容:
    • 进程id
    • 进程状态:初始态、就绪态、运行态、挂起态(阻塞)、中止态
    • 进程切换时需要保存cpu寄存器值
    • 当前工作目录
    • umask 掩码
    • 用户id,组id
    • 文件描述符表
    • 信号相关:未决信号集、信号屏蔽字
    • 进程可以使用的资源上限
      请添加图片描述

进程状态

  • 就绪态:完成准备,等待 cpu 划分时间片,得以执行。
  • 运行态:获取cpu时间片,正则运算。
  • 挂起态:等待除 cpu 以外的其他资源。在这种进程状态,会主动放弃 cpu 使用权,提高系统 cpu 利用率。
  • 停止态:正常、异常终止进程。

环境变量

  • 使用命令 env 查看系统所有环境变量。
  • 环境变量语法格式:名 = 值 : 值 : 值 …
  • echo $环境变量名

fork 函数

pid_t fork(void);
成功:
fork 之后会产生一个子进程。父子进程各自对 fork 函数做返回。父进程:返回子进程 id子进程:返回 0
失败:不产生子进程返回 -1

进程控制

  • ps aux | grep 关键字。——搜索系统中包含关键字的进程。
  • ./a.out 进程的父进程 bash
  • 系统调用和库函数的区别:
    • 系统调用:访问内核数据结构,访问硬件资源二者之一。
    • 库函数:二者均无。

fork 后父子进程异同

父子相同:

  • 全局变量、.data、. text、栈、堆、环境变量、用户id、进程工作目录、宿主目录、信号处理方式……
    父子不同:
  • 进程id(pid)、fork 返回值、进程运行时间、父进程id、闹钟(定时器)、未决信号集。

读时共享,写时复制

  • fork后,对于父进程的用户空间的数据,系统采用读时共享,写时复制
  • 父子进程共享的:
    1. 文件描述符(对应打开的文件结构体)
    2. mmap 创建的映射区

exec函数族

  • 工作原理:
    • 将当前进程的.text、 .data … 替换为所要加载程序的 .text、data. ……,然后将进程从新的.text第一条指令开始执行。但进程 ID 不变。
  • 工作特性:
    • exec 函数族函数,一旦调用成功执行新程序,不会返回!只有调用失败才返回,错误值 -1,errno
    • 通常使用时我们只需在execxxx()函数后,调用perror 和 exit,无需if判断。

execlp

  • p:PATH 的意思。该函数使用时,自动借助环境变量 PATH,寻找可执行程序。
    • 可以用来调用系统的程序。
int execlp(const char *file, const char *arg, .../* (char  *) NULL */);
参数:参 1:待加载的程序名字。需要配合 PATH 使用。参 2:argv0 —— 可执行文件名参 3:argv1参 4:argv1...
返回值:成功:不返回失败:-1,errno
该函数通常用来调用系统函数。

execl

直接调用指定程序。

进程回收

  • fork 后的子进程,其父进程有义务在子进程结束时,回收该子进程。隔辈进程无回收挂关系。
  • 进程终止
    1. 关闭所有文件描述符
    2. 释放用户空间分配的内存。
    3. 进程的 pcb 残留在内核中。保存当前进程结束的状态(正常:退出值。异常。异常:终止其运行的信号编号)

孤儿进程

父进程先于子进程终止,子进程沦为”孤儿进程“。会被 init 进程领养。

僵尸进程

子进程终止,父进程未终止也未回收子进程。

wait 回收

只有父子进程之间存在回收关系,爷孙,叔侄进程不存在回收关系。

#include <sys/wait.h>pid_t wait(int *wstatus);
参:传出参数:回收进程的状态。
返回值;成功:回收进程pid失败:-1,erron
  • 函数的作用:
    1. 阻塞等待子进程退出(终止)。
    2. 回收子进程残留在内核的 pcb。
    3. 获取子进程的退出状态(正常、异常)。——传出参数:wstatus
  • 回收子进程退出状态:
    • 正常退出:
      • 判断 WIFEXITED(status) 为真。
      • 进一步是使用 WEXITSTATUS(status) 获取退出值。
    • 异常退出:
      • 判断 WIFSIGNAL(status) 为真。
      • 进一步使用 WTERMSIG(status) 获取杀死子进程的信号的编号。

waitpid

pid_t waitpid(pid_t pid, int *wstatus, int options);
参数:pid:> 0:通过 pid 指定回收某一个子进程。-1:回收任意子进程。0:回收与父进程属于同一进程组的子进程。wstatus:传出参数,回收子进程状态。options:WNOHANG —— 指定回收方式为”非阻塞“。
返回值:> 0 :成功,回收的进程 pid0:函数调用时参 3 指定了 WNOHANG,而子进程没有结束。失败:-1,errno

总结:

一次 wait、waitpid 调用,只能回收一个子进程!!!

想回收 N 个子进程,需要将 wait、waitpid 调用放于循环中。
功,回收的进程 pid
0:函数调用时参 3 指定了 WNOHANG,而子进程没有结束。
失败:-1,errno

总结:

一次 wait、waitpid 调用,只能回收一个子进程!!!

想回收 N 个子进程,需要将 wait、waitpid 调用放于循环中。

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

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

相关文章

在 CentOS 7 上安装 PHP 7.3

在 CentOS 7 上安装 PHP 7.3 可以按照以下步骤进行操作&#xff1a; 1. 安装必要的依赖和 EPEL 仓库 EPEL&#xff08;Extra Packages for Enterprise Linux&#xff09;是为企业级 Linux 提供额外软件包的仓库&#xff0c;yum-utils 用于管理 yum 仓库。 sudo yum install -…

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了&#xff0c;虽然经过扩容和调整&#xff0c;但反应依旧不稳定&#xff0c;甚至小圆圈转半天最后却提示“服务器繁忙&#xff0c;请稍后再试。” 故此&#xff0c;本文通过讲解在本地部署 DeepSeek并配合python代码实现&#xff0c;让你零成本搭建自己的AI…

C++从入门到入土(七)——多态

目录 前言 多态的概念 多态的定义 虚函数的介绍 虚函数的重写/覆盖 析构函数的重写 override和final关键字 纯虚函数和抽象类 重写/重载/隐藏总结 多态的原理 小结 前言 C一共有三个特性&#xff0c;封装、继承和多态&#xff0c;在前面的文章中&#xff0c;我们分别…

浅谈时钟启动和Systemlnit函数

时钟是STM32的关键&#xff0c;是整个系统的心脏&#xff0c;时钟如何启动&#xff0c;时钟源如何选择&#xff0c;各个参数如何设置&#xff0c;我们从源码来简单分析一下时钟的启动函数Systemlnit&#xff08;&#xff09;。 Systemlnit函数简介 我们先来看一下源程序的注释…

【数据结构】6栈

0 章节 3&#xff0e;1到3&#xff0e;3小节。 认知与理解栈结构&#xff1b; 列举栈的操作特点。 理解并列举栈的应用案例。 重点 栈的特点与实现&#xff1b; 难点 栈的灵活实现与应用 作业或思考题 完成学习测试&#xff12;&#xff0c;&#xff1f; 内容达成以下标准(考核…

HOT100——链表篇Leetcode160. 相交链表

文章目录 题目&#xff1a;Leetcode160. 相交链表原题链接思路代码 题目&#xff1a;Leetcode160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表…

江科大51单片机笔记【16】AD/DA转换(下)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…

【CF】Day5——Codeforces Round 921 (Div. 2) BC

B. A Balanced Problemset? 题目&#xff1a; 思路&#xff1a; 这道题要我们分成n个子问题&#xff0c;我们假设这几个子问题分别是a1,a2,a3,...an&#xff0c; 那么就是让我们求 gcd(a1,a2,a3,....,an)&#xff0c;我们假设这个值是d 那么就有 d | a1&#xff0c;d | a2…

Mininet 自定义拓扑类型详解

Mininet 通过 --topo 参数支持多种自定义网络拓扑结构&#xff0c;适用于不同场景的网络模拟需求。以下是所有内置拓扑类型及其参数说明&#xff1a; 一、基础拓扑类型 拓扑类型参数格式说明示例命令singlesingle,<n>单一交换机连接所有主机&#xff08;默认 2 台主机&a…

图论part3|101.孤岛的总面积、沉没孤岛、417. 太平洋大西洋水流问题

101. 孤岛的总面积 &#x1f517;&#xff1a;101. 孤岛的总面积思路&#xff1a;和昨天的岛的区别是&#xff1a;是否有挨着边的岛屿 所以可以先遍历四条边挨着的岛屿&#xff0c;把他们标记为非孤岛再计算其他岛屿当中的最大面积 代码&#xff1a;&#xff08;深度搜索&…

第十一届蓝桥杯单片机国赛

什么&#xff1f;4T模拟赛和省赛做起来轻轻松松&#xff1f;不妨来挑战一下第十一届国赛&#xff0c;这一届的国赛居然没考超声波、串口通信&#xff01;只要你正确地理解了题目的意思&#xff0c;规避出题人挖的坑&#xff0c;拿个国一轻轻松松。 附件&#xff1a;第十一届蓝桥…

【Unity6打包Android】游戏启动的隐私政策弹窗(报错处理)

Unity版本&#xff1a;Unity6000.0.24 增加弹窗步骤 1. 自定义AndroidManifest 1.1 在Player Setting > Publishing Settings > Build下勾选Custom Main Manifest&#xff0c;在Assets/Plugins/Android路径下生成AndroidManifest.xml文件 1.2 修改AndroidManifest.xml…

记录一个SQL自动执行的html页面

在实际工作场景中&#xff0c;需要运用到大量SQL语句更新业务逻辑&#xff0c;对程序员本身&#xff0c;写好的sql语句执行没有多大问题&#xff08;图1&#xff09;&#xff0c;但是对于普通用户来说还是有操作难度的。因此我们需要构建一个HTML页面&#xff08;图2&#xff0…

mac安装mysql之后报错zsh: command not found: mysql !

在Mac上安装MySQL后&#xff0c;如果终端中找不到mysql命令&#xff0c;通常是 因为MySQL的命令行工具&#xff08;如mysql客户端&#xff09;没有被正确地添加到你的环境变量中。 检查 MySQL 是否已安装 ps -ef|grep mysql查看到路径在 /usr/local/mysql/bin 查看 .bash_pro…

socket编程与TCP协议

如果你想和远方的朋友通电话&#xff0c;但是&#xff0c;没有办法直接把自己的声音放在电线上变成电流信号&#xff0c;你需要使用电话机拿起听筒拨号&#xff0c;而这个电话就是Socket&#xff0c;它让你简单方便地完成电流通话&#xff0c;从我们编程的角度来看&#xff0c;…

css基本功

为什么 ::first-letter 是伪元素&#xff1f; ::first-letter 的作用是选择并样式化元素的第一个字母&#xff0c;它创建了一个虚拟的元素来包裹这个字母&#xff0c;因此属于伪元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…

环境配置 | 5分钟极简Git入门:从零上手版本控制

你是否刚接触Git&#xff1f;别担心&#xff01;这篇指南将用最简单的步骤带你掌握Git核心操作&#xff0c;快速开启版本控制之旅&#xff01;✨ 1.git在win10上的下载安装 1.1.下载git 打开官方网站 Git - Downloadshttps://git-scm.com/downloads ​ ​​ 1.2.git安装 …

软件工程概述、软件过程模型、逆向工程(高软45)

系列文章目录 软件工程概述、软件过程模型、逆向工程。 文章目录 系列文章目录前言一、软件工程概述二、能力成熟度模型1.能力成熟度模型CMM2.能力成熟度模型集成CMMI 三、软件过程模型1.瀑布模型SDLC2.原型化模型3.螺旋模型4.增量模型5.喷泉模型6.敏捷模型7.统一过程模型RUP 四…

接口自动化入门 —— Jmeter实现在接口工具中关联接口处理方案

1. JMeter 接口关联处理的核心概念 接口关联是指在多个接口请求之间共享数据&#xff0c;例如将一个接口的返回值作为另一个接口的输入参数。常见的场景包括&#xff1a; 使用登录接口返回的 Token 作为后续接口的认证信息。 将一个接口返回的 ID 作为另一个接口的请求参数。…

websocket学习手册及python实现简单的聊天室

概述 WebSocket 是一种网络通信协议&#xff0c;允许在单个 TCP 连接上进行全双工通信。它最核心的优势就在于实现了持久连接&#xff0c;实现了实时的数据传输。HTTP 协议有一个很大的缺点&#xff0c;通信只能由客户端发起&#xff0c;服务器返回响应后连接就会关闭&#xf…