Linux高并发服务器开发(三)进程

news/2024/7/1 13:43:27

文章目录

  • 1 程序和进程
  • 2 MMU 内存管理单元
  • 3 进程控制块PCB
  • 4 进程的状态(重点)
  • 5 进程相关命令
  • 6 进程号和相关函数
  • 7 进程的创建
  • 8 父子进程的关系
  • 9 区别父子进程
  • 10 父子进程的地址空间
  • 11 GDB调试多进程
  • 12 进程退出函数
  • 13 等待子进程退出函数
  • 14 孤儿进程和僵尸进程
  • 15 进程替换


1 程序和进程

程序是存放在存储介质上的一个可执行文件,进程是程序执行的过程。进程的状态是变化的,包括进程的创建、调度和消亡。程序是静态的,进程是动态的。

进程是管理事务的基本单元

进程拥有自己独立的处理环境(需要用到哪些环境变量、程序的目录在哪里,当前是哪个用户在运行此程序)和系统资源(CPU占用率、存储器、I/O设备、数据、程序)。

公司相当于操作系统,部门相当于进程,公司通过部门来管理(操作系统通过进程管理)各个部门中的员工。

并行(真正的一起执行)和并发(在短时间内切换使用资源,造成一起执行的错觉)

在这里插入图片描述

2 MMU 内存管理单元

CPU用于管理虚拟内存和物理内存之间的映射
在这里插入图片描述

3 进程控制块PCB

进程运行时,内核为每一个进程分配一个PCB,用于维护进程的相关信息,Linux内核的进程控制块是task_struct

在这里插入图片描述

4 进程的状态(重点)

在这里插入图片描述

这张图可以不背了解一下
在这里插入图片描述
查看进程状态 ps aux

在这里插入图片描述

5 进程相关命令

ps

在这里插入图片描述
在这里插入图片描述
top 和ps -a差不多

kill 杀进程,
kill pid
在这里插入图片描述

在这里插入图片描述
有些进程不能直接杀死 需要 kill -9 pid
在这里插入图片描述

6 进程号和相关函数

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 进程的创建

在这里插入图片描述
从一个已存在的进程中创建一个新进程
在这里插入图片描述
会输出两个helloworld
子进程不会调用fork函数,会在fork下面那条语句开始执行。避免重复执行

在这里插入图片描述
PC指针,指向下一跳指令
在这里插入图片描述

8 父子进程的关系

在这里插入图片描述
在这里插入图片描述
写时拷贝,读时共享
读时共享,父子进程如果没有改数据,则父子进程都会共享一个空间,没有必要拷贝在自己的空间里。即有相同的文件描述符,和共同的文件偏倚指针。
写时拷贝,如过父子进程需要更改数据,则会拷贝到自己的空间,然后进行更改。

9 区别父子进程

通过pid进行区分
在这里插入图片描述
在这里插入图片描述

10 父子进程的地址空间

读时共享,写时拷贝

在这里插入图片描述
在这里插入图片描述
valgrind 检查内存泄漏
valgrind ./a.out
在这里插入图片描述
子进程需要分配一次,释放两次
在这里插入图片描述

11 GDB调试多进程

在这里插入图片描述

12 进程退出函数

在这里插入图片描述
在这里插入图片描述

13 等待子进程退出函数

在这里插入图片描述
使用wait 和waitpid 释放子进程
在这里插入图片描述
等待任意一个子进程结束
使用wait时进程会挂起,直到收到子进程退出或者收到一个不能忽视的信号
调用进程没有子进程,就立即返回,若子进程结束,函数会立即返回,并且回收所有资源。
wait()主要用于回收已经结束的子进程的资源。
如果status不为null,就会把子进程退出时的状态存在satus中,。
在这里插入图片描述
status的宏
在这里插入图片描述
在这里插入图片描述
waitpid 不阻塞
wait 阻塞

14 孤儿进程和僵尸进程

在这里插入图片描述
在这里插入图片描述

15 进程替换

在这里插入图片描述
exec 函数组
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
不会打印hello world,因为进程已经被替换成ls的main函数
在这里插入图片描述
在这里插入图片描述

剩下的了解即可

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

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

相关文章

PyQt问题汇总(持续更新)

目录 1.抛出异常后QAppliaction自动闪退 2.Unbuntu共享文件夹自动挂载 1.抛出异常后QAppliaction自动闪退 开发阶段,PyQt5 QAppliaction会在遇到未捕获的异常时立即退出,它能够快速发现并报告错误,我在调用一些密码算法库的时候&#xff0…

intellij idea中使用R语言plot画图无图像问题

1、在intellij idea中使用R语言plot函数时,会遇到各种各样的问题,会出现图片不显示问题, 可以看到,目前我电脑r语言版本为4.2.1,输入下面代码: # # 安装包 # install.packages(ggplot2) # library(ggplot2…

如何焊铜管 量测射频前端模块

先说结论 要做Port Extension待测物要上电 且根据逻辑表给Enable pin上电网分输入功率 不要太大 -20dBm即可铜管的接地 要足够 以及足够近铜管与待测物之间 必要时 隔一颗电容不要将匹配元件 也包含在量测范围讯号针不要直接焊在焊盘上 首先 铜管要做Port…

Pycharm 启动 Django项目 —— python篇

1、打开你的工程,在菜单栏里找到Run-->Edit Configurations 2、在打开的对话框里边选择Python,点击号 3.选择Python 4.出现了一个新的项Unnamed,你可以把它改名叫debug,好听一点 5.脚本选择你网站的manage.py,脚本参…

GPU设置

GPU降温测试 前提 同一个训练程序,使用8块GPU,GPU使用率基本全程>90%,GPU为1080 Ti 限制最高功率效果 不限制最高功率(默认最高功率250W):最高温度85,大多时间在75-85之间 将最高功率限制为150W:最高…

Go 与 Java 字符编码选择:UTF-8 与 UTF-16 的较量

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…